the*_*3RV 3 arrays list prolog
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).
Run Code Online (Sandbox Code Playgroud)
我逐行注释掉并得到错误,直到我取出 numWalls(NewMap,W), 行。append 将一个二维数组展平,length 返回展平地图的正确长度。我们需要计算 '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).
Run Code Online (Sandbox Code Playgroud)
“错误:is/2:参数未充分实例化” 看起来错误与我的 is 语句有关?
看起来您缺少一些方括号。除了那个小的语法问题,你的程序逻辑很好:
numWalls([], 0).
numWalls(['w'|Tail], W) :-
numWalls(Tail, W1),
W is W1 + 1.
numWalls([H|Tail], W):-
H \= (w),
numWalls(Tail, W).
Run Code Online (Sandbox Code Playgroud)
编辑:正如错误评论的那样,第二条规则需要改变w
以防止错误地消费,以避免numWalls([w,w], 0).
成功。
归档时间: |
|
查看次数: |
1900 次 |
最近记录: |