1

こんにちは、私が尋ねるときにパスカルn行目を行う方法を知っている人はいますか? パスカル(2,行). Row=[1,2,1] を取得しますか??

私を助けてください

4

3 に答える 3

1

コードゴルフに対するこの答えは、プロローグに実装されており、名前を拡張するだけです。

于 2009-11-17T09:05:00.217 に答える
1

n番目の行を計算するコードは次のとおりです。

最初の部分は行をスキャンして、次の行を計算します。他の要素と同様に、次の行の最初の「1」が合計になるように、最初の行の前に0を付ける必要があります。それは2つのリストで繰り返されます:

pascal_next_row([X],[X]).
pascal_next_row([H,H2|T],[A|B]):-
    pascal_next_row([H2|T],B),
    A is H + H2.

2番目の部分は、要求された行までのすべての行を計算します。Nで再発します:

pascal(0, [1]) :- !.
pascal(N, R) :-
    N1 is N-1,
    pascal(N1, R1),
    pascal_next_row([0|R1], R).

完全な三角形が必要な場合は、2番目のパラメーターを変更して行のリストを処理し、それらを収集するだけです。

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] は3行目です。

于 2009-11-18T04:49:38.540 に答える