如何创建添加到特定数字的数字列表

Nic*_*ick 7 prolog

我需要一些帮助在Prolog中编写一个谓词,给定一个数字作为输入,返回一个包含数字的列表列表.

让我们调用谓词addUpList/2,它应该像这样工作:

?- addUpList(3,P).
P = [[1,2], [2,1], [1,1,1]].       % expected result
Run Code Online (Sandbox Code Playgroud)

我很难解决这个问题,我开始认为这是不可能的.有任何想法吗?提前致谢.

Eni*_*ity 4

尝试这个:

condense([], Rs, Rs).
condense([X|Xs], Ys, Zs) :-
    condense(Xs, [X|Ys], Zs).
condense([X, Y|Xs], Ys, Zs) :-
    Z is X + Y,
    condense([Z|Xs], Ys, Zs).

condense(Xs, Rs) :-
    condense(Xs, [], Rs).

expand(0, []).
expand(N, [1|Ns]) :-
    N > 0,
    N1 is N - 1,
    expand(N1, Ns).

addUpList(N, Zs) :-
    expand(N, Xs),
    findall(Ys, condense(Xs, Ys), Zs).
Run Code Online (Sandbox Code Playgroud)

让我知道我得到了什么分数。:-)