こんにちは、私が尋ねるときにパスカルn行目を行う方法を知っている人はいますか? パスカル(2,行). Row=[1,2,1] を取得しますか??
私を助けてください
こんにちは、私が尋ねるときにパスカルn行目を行う方法を知っている人はいますか? パスカル(2,行). Row=[1,2,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).
パスカルの三角形は、タルタリアの三角形としても知られています。
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行目です。