我编写了一个程序,对于两个相等的数组X和Y,应计算SUM((X-Y)*(X-Y))。但是它只返回false:
euclidsqr([],[],ED).
euclidsqr([X|Xs],[Y|Ys],ED) :- euclidsqr(Xs,Ys,ED),ED is (X-Y)*(X-Y).
答案 0 :(得分:2)
这里有三个问题:
您的两个空列表的版本应使用0
而不是ED
统一第二个参数,因为它仍然是一个 free 变量,因此:
euclidsqr([], [], 0).
您还使用ED
来统一结果(在子句的开头),但是在递归调用中(在列表的尾部)使用相同的变量,此外,您不对结果进行求和递归调用的结果,用(X-Y)*(X-Y)
:
euclidsqr([X|Xs], [Y|Ys], ED) :-
euclidsqr(Xs, Ys, ED1),
ED is ED1 + (X-Y)*(X-Y).
或将其放在一起:
euclidsqr([], [], 0).
euclidsqr([X|Xs], [Y|Ys], ED) :-
euclidsqr(Xs, Ys, ED1),
ED is ED1 + (X-Y)*(X-Y).