2012-04-08 14 views
1
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. 

Col1が5になるまで、calculateSumをCol + 1のインクリメントで呼び出したいですか?なぜ繰り返し動作しないのですか?

これを達成するための方法は他にありますか?

答えて

2

repeat/0おそらくあなたはそう思わないでしょう。 repeat/0は無限の選択点を作成します。 repeat/0の基本的な使用は、副作用の述語でしかありません。私はあなたがPrologの実行を正しく理解するまでそれを使用しないことをお勧めします(そして、それでも、役に立たないイディオムのようなものです)。

代わりに適切な再帰を実装してください(必要に応じてa tutorialを参照)。ここでの別の良い解決策は、より高次の述語を使用することですが、基本的なPrologを取得する前にそれを行うことはありません。

関連する問題