Пролог Евклидова площадь - PullRequest
0 голосов
/ 13 декабря 2018

Я написал программу, в которой для двух одинаковых массивов X и Y должно быть вычислено SUM ((XY) * (XY)).Однако он просто возвращает false:

euclidsqr([],[],ED).
euclidsqr([X|Xs],[Y|Ys],ED) :- euclidsqr(Xs,Ys,ED),ED is (X-Y)*(X-Y).

1 Ответ

0 голосов
/ 13 декабря 2018

Здесь есть три проблемы:

ваша версия для двух пустых списков должна объединить второй параметр с 0, а не ED, так как тогда он остается переменной free ,так:

euclidsqr([], [], <b>0</b>).

вы также используете ED для объединения результата (в начале предложения), но вы используете ту же переменную в рекурсивном вызове (в конце списка), более тоговы не суммируете результат рекурсивного вызова, набирая (X-Y)*(X-Y):

euclidsqr([X|Xs], [Y|Ys], ED) :-
    euclidsqr(Xs, Ys, <b>ED1</b>),
    ED is <b>ED1 +</b> (X-Y)*(X-Y).

или складывая это вместе:

euclidsqr([], [], <b>0</b>).
euclidsqr([X|Xs], [Y|Ys], ED) :-
    euclidsqr(Xs, Ys, <b>ED1</b>),
    ED is <b>ED1 +</b> (X-Y)*(X-Y).
...