我对 Prolog 完全陌生,正在做家庭作业。我的程序应该采用两个长度相等的列表,并执行 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).