我對Prolog完全陌生,並且在做家庭作業。我的程序應該採用兩個等長的列表,並執行D = sqrt((X1-Y1)^ 2 +(X2-Y2)^ 2 + ... +(XN-YN)^ 2)。我已經編寫了代碼來獲得正確的答案,但它沒有正確顯示。我認爲這可能是邏輯流程的一個問題,因爲它看起來像是在一個無限循環中結束。它應該是這樣的:Prolog邏輯流程
?- 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).
不應該'F'評價爲'd-E',而不是'd + E'?你希望遞歸距離是總距離減去每次第一項的距離。我也對'distance(T1,T2,S)'這一行感到困惑;'你可以評論一下嗎? – ely 2012-04-16 21:49:41
N/M,我明白你現在在做什麼..在最後一個參數中累積距離的總和。我認爲這有點混亂,但是正確。所以唯一的問題是奇怪的印刷。我認爲這與你缺乏真正的基礎案例有關。在你的方法中,距離([],[],0)不會成立。另請注意,代碼在運行時如何掛起,等待額外的'。'。返回true後。 – ely 2012-04-16 22:01:05