Предикат. Сумма элементов двух списков наиболее близка к заданному чилу - Prolog
Формулировка задачи:
p(X, Y, Q, -S)
X и Y - упорядоченные по возрастанию списки,
Q - число
Предикат истинный тогда и только тогда, когда S есть сумма вида xi+yj, наиболее близкая к числу Q.
Собственно задача была реализована ее в 2010 году, но мне кажется решение не верное.
x [1,2,3]
y [1,2,3]
Q 2
false
Непонятно, что делает данный код.
Как можно по другому реализовать данную задачу
Листинг программы
- p(ListX, ListY, Q, S):-setof(D, dif(ListX, ListY, Q, D), [MinDif|_]),
- member(X, ListX), member(Y, ListY), S is X+Y,
- (S >= Q, MinDif=:=S-Q; S<Q, MinDif=:=Q-S). /*что происходит в данной строчке, а именно что означает MinDif=:=S-Q;*/
- dif(ListX, ListY, Q, D):-member(X, ListX), member(Y, ListY),
- S is X+Y,(S>=Q, D is S-Q ; S<Q, D is Q-S).
Решение задачи: «Предикат. Сумма элементов двух списков наиболее близка к заданному чилу»
textual
Листинг программы
- S = X+Y
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д