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 になるまで、Col + 1 のインクリメントで calculateSum を呼び出したいですか?

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

4

1 に答える 1

2

repeat/0おそらくあなたが思っていることをしません。repeat/0無数の選択ポイントを生み出します。基本的に of の使用はrepeat/0副作用述語のみです。Prolog の実行を正しく理解するまでは、使用しないことをお勧めします (それでも、役に立たないイディオムです)。

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

于 2012-04-08T23:30:29.117 に答える