嗨,有谁知道我怎么能做pascal第n行 当我要求的时候 :?帕斯卡(2,行)。 我得到Row = [1,2,1] ??
请帮帮我
答案 0 :(得分:1)
这是计算第n行的代码。
第一部分扫描一行,以计算下一行。第一行必须以0为前缀,以便下一行中的第一个“1”是一个总和,就像其他元素一样。它在2个列表中进行了递归:
pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
pascal_next_row([H2|T],B),
A is H + H2.
第二部分计算所有行,直到被询问的那一行。它在N:
上进行了解释pascal(0, [1]) :- !.
pascal(N, R) :-
N1 is N-1,
pascal(N1, R1),
pascal_next_row([0|R1], R).
如果您需要完整的三角形,您只需更改第二个参数以处理行列表并收集它们:
pascal(0, [[1]]) :- !.
pascal(N, [R, R1 | RN]) :-
N1 is N-1,
pascal(N1, [R1 | RN]),
pascal_next_row([0|R1], R).
答案 1 :(得分:1)
This answer to a code golf在prolog中有实现,只需扩展名称:
答案 2 :(得分:0)
Pascal Triangle也被称为Tartaglia Triangle:
sumC([X,Y],[Z]) :- Z is X + Y.
sumC([X,Y|L], Z):- H is X + Y,
sumC([Y|L],L2),
Z = [H|L2].
tartaglia(1,[1]) :- ! .
tartaglia(2,[1,1]) :- !.
tartaglia(N, L) :- Ant is N - 1,
tartaglia(Ant,L2),
sumC(L2,R),
append([1|R],[1],L), !.
使用辅助谓词sumC,您可以轻松获得:
?- tartaglia(3,R).
R = [1, 2, 1].
?- tartaglia(2,R).
R = [1, 1].
?- tartaglia(1,R).
R = [1].
?- tartaglia(6,R).
R = [1, 5, 10, 10, 5, 1].
正如我的评论所说。你问第n行。你的例子中的[1,2,1]是第3行。