为什么重复不工作?

时间:2012-04-08 23:16:22

标签: prolog

genVertex(List,Row,Col,Result) :-
   Col1 is Col,
   repeat,
   (Col \= Row ->   
   calculateSum(List,List,Row,Col1,Y),write(Y),write('\n'),
   Result = [Y|Tail]
   ;Result = Tail
   ),
   Col1 is Col1 + 1,
   Col1 == 5.

我想以Col + 1的增量调用calculateSum,直到Col1为5?

还是以其他方式实现这一目标?

1 个答案:

答案 0 :(得分:2)

repeat/0可能不会按照您的想法行事。 repeat/0创造了无限的选择点。基本上使用repeat/0只是副作用谓词。我建议你不要使用它,直到你正确理解Prolog执行(即便如此,它也是一种无用的习语)。

尝试实现正确的递归(如果需要,请参阅a tutorial)。这里另一个好的解决方案是使用更高阶的谓词,但在获得基本的Prolog之前我不会这样做。