我需要一些帮助在Prolog中编写一个谓词,给定一个数字作为输入,返回一个包含数字的列表列表.
让我们调用谓词addUpList/2,它应该像这样工作:
?- addUpList(3,P).
P = [[1,2], [2,1], [1,1,1]]. % expected result
Run Code Online (Sandbox Code Playgroud)
我很难解决这个问题,我开始认为这是不可能的.有任何想法吗?提前致谢.
尝试这个:
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)
让我知道我得到了什么分数。:-)