2012-12-01 37 views
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:论点是没有充分实例化” 貌似错误是我的说法?

回答

4

看起来你缺少一些方括号。除此之外,小的语法问题,你的程序逻辑是罚款:

numWalls([], 0). 
numWalls(['w'|Tail], W) :- 
    numWalls(Tail, W1), 
    W is W1 + 1. 
numWalls([H|Tail], W):- 
    H \= (w), 
    numWalls(Tail, W). 

编辑:作为false评论,第二条规则需要改变对消耗w错误,避免numWalls([w,w], 0).得逞。

Link to a demo on ideone.

+0

固定括号后,参数没有被充分实例化。我认为还需要改变W是W1 + 1到W是W1-1。 – theB3RV

+1

@ theB3RV尝试切换递归调用和添加行。 – dasblinkenlight

+0

切换它们摆脱了错误,我拿出W> = N/10,并在它的位置放置一个打印(W)语句,它不会打印出W。 – theB3RV

相关问题