walls(This) :-
append(This, NewMap),
length(NewMap, N),
numWalls(NewMap, W),
W >= N/10.
numWalls([], _, 0).
numWalls('w'|Tail, W) :-
W is W1 + 1,
numWalls(Tail, W1).
numWalls(_|Tail, W):-
numWalls(Tail, W).
我逐行注释并删除numWalls(NewMap, W)这一行,直到得到false。append函数可以将一个二维数组压平,而length函数返回压平地图的正确长度。我们需要计算列表中出现'w'的次数,如果超过列表的10%,则返回True。
walls(Maps) :-
append(Maps, NewMap),
length(NewMap, N),
print(NewMap),
numWalls(NewMap, W),
print(W) .
numWalls([], 0).
numWalls(['w'|Tail], W) :-
numWalls(Tail, W1),
W1 is W-1.
numWalls([_|Tail], W):-
numWalls(Tail, W).
"错误: is/2: 参数未充分实例化"。看起来错误出在我的is语句上?
numWalls([w,w],0)
成功的结果是错误的。你需要在最后一个子句中加入一个干净的保护条件。 - false