3
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)行为止。 append平坦化一个二维数组,长度返回平展地图的适当长度。我们需要计算一个'w'在列表中出现的次数,如果超过10%的列表是'w',则返回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).
“ERROR:是/ 2:论点是没有充分实例化” 貌似错误是我的说法?
固定括号后,参数没有被充分实例化。我认为还需要改变W是W1 + 1到W是W1-1。 – theB3RV
@ theB3RV尝试切换递归调用和添加行。 – dasblinkenlight
切换它们摆脱了错误,我拿出W> = N/10,并在它的位置放置一个打印(W)语句,它不会打印出W。 – theB3RV