1

嗨,有没有人知道当我要求时我该怎么做帕斯卡第 n 行:?帕斯卡(2,行)。我得到 Row=[1,2,1] ??

请帮我

4

3 回答 3

1

这个对代码高尔夫的回答在 prolog 中有实现,只需扩展名称:

于 2009-11-17T09:05:00.217 回答
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).
于 2009-11-16T06:57:25.887 回答
0

帕斯卡三角也被称为塔尔塔利亚三角:

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] 是第三行。

于 2009-11-18T04:49:38.540 回答