私は 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
そして、結果を印刷するための行があるからです。また、エンターを押すまで終了しません (ピリオドなし)。そのため、ループが発生するのではないかと心配しています。コードを言い換えたり、ロジックをリダイレクトして、正常に印刷するにはどうすればよいですか?
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).