Я нашел этот предикат для вычисления всех возможных сумм.Как рассчитать все возможные деления в списке?
subset_sum(0,[],[]).
subset_sum(N,[_|Xs],L) :-
subset_sum(N,Xs,L).
subset_sum(N,[X|Xs],[X|Rest]) :-
R is N-X,
subset_sum(R,Xs,Rest).
Зная, что разделение не имеет коммутативное свойство, как я могу получить тот же результат для разделения?
Этот предикат работает только для разделения между двумя элементами и в порядке.
subset_div(1,[],[]).
subset_div(N,[_|Xs],L) :-
subset_div(N,Xs,L).
subset_div(N,[X|Xs],[X|Rest]) :-
R is X/N,
subset_div(R,Xs,Rest).
как вы можете получить этот результат?
?-subset_div(20,[10,100,90,3,5],L).
L=[100,5].
?-subset_div(5,[10,4,59,200,12],L).
L=[200,10,4].
5 = (200/10)/4 или 5 = (200/4)/10, но 5 \ = (4/200)/10 или 5 \ = (10/4)/200
Спасибо.
Не могли бы вы расширить ваш вопрос? Я не понимаю, как «4» попадает в результат. – CapelliC
@CapelliC '(200/10)/4 = 5' – zaquest