У меня вопрос относительно переменной, создаваемой внутри программы. Допустим, у меня есть функция (? - не уверен в формулировке здесь), которая есть/2, есть способ изменить ее на/1?Создание новой переменной с пролог-программой
:- use_module(library(clpfd)).
solve(N, L):-
L = [A,B,C,D],
L ins 1..sup,
N #= A * B * C * D,
all_distinct(L),
A #< B, B #< C, C#< D,
labeling([],L),nl,
Z #= A+B+C+D,
write(A+B+C+D=Z).
Есть ли возможность фактически решить проблему (N), где L создается на ходу. Пробовал с помощью обоих,
L is [A,B,C,D],
или
L = [],
L is [A,B,C,D]
но не повезло прямо сейчас.
Программа работает так: ->
?- solve(30,Elements).
1+2+3+5=11
Elements = [1, 2, 3, 5].
?- solve(60, Elements).
1+2+3+10=16
Elements = [1, 2, 3, 10] ;
1+2+5+6=14
Elements = [1, 2, 5, 6] ;
1+3+4+5=13
Elements = [1, 3, 4, 5] ;
false.
Есть ли способ сделать это с помощью решения (N), но по-прежнему показывать элементы в списке? –
Только если вы распечатываете список (используя запись - для печати каждого элемента L). – coder
Обновлен ответ, чтобы распечатать список – coder