私はPrologを完全に使いこなしており、宿題に取り組んでいます。私のプログラムは、等しい長さの2つのリストを取って、D = sqrt((X1-Y1)^ 2 +(X2-Y2)^ 2 + ... +(XN-YN)^ 2)私は正しい答えを得るためのコードを書いたが、正しく提示していない。私はそれが無限ループで終わっているように思えるので、ロジックの流れに問題があると思います。ように見えることになっています:プロローグのロジックフロー
?- distance([1,2,3], [2,3,4], D).
D = 1.732051.
私のコードは私に正しい結果を与えているが、それはそれが好きで出力します。
?- distance([1,2,3],[2,3,4],D).
1.732051
true
をそして、私はそこにラインを持っているという理由だけで結果を印刷します。それはまた私がenterを押すまで終わらない(期間なし)ので、私はループがあるのを恐れている。それを正常に印刷するには、コードを書き換えたり、ロジックをリダイレクトしたりするにはどうすればよいですか?あなたのプログラムが無限ループに入らない
distance([],[],D) :-
F is sqrt(D),
format("~f~n", [F]).
distance([A|T1], [B|T2], D) :-
var(D),
S is (A-B)*(A-B),
distance(T1, T2, S);
C is A-B,
E is C*C,
F is D+E,
distance(T1, T2, F).
は 'F'はない' D + E'、 'D-E'に評価されていないでしょうか?再帰的な距離は、全体の距離から毎回最初の語句までの距離を引いた値にする必要があります。私はまた、 'distance(T1、T2、S);という行で混乱しています;それについてあなたはおそらくコメントできますか? – ely
N/M、私はあなたが今何をしているのかを見ています。最後の議論での距離の合計を累計しています。私は少し難解だと思うが、正しい。唯一の問題は奇妙な印刷です私はこれがあなたの本当の根拠の欠如に関連していると思う。あなたの方法では、距離([]、[]、0)は真ではありません。また、実行時にコードがハングアップし、余分な 'を待っていることに注意してください。真を返した後 – ely