パスカルの三角錐のPrologでの実装

このように使う
Ȁ3 ?- h1(1,R),h1(R,R1),h1(R1,R2).
R = [[1, 1], [1]],
R1 = [[1, 2, 1], [2, 2], [1]],
R2 = [[1, 3, 3, 1], [3, 6, 3], [3, 3], [1]].

Rが2段目
R1が3段目
R2が4段目。
以下同様に求まる。

コードはこちら。
端っこの特殊処理でコードが膨らむのが欠点。


f([B],[C],[D]):-
	D is B+C,!.
f([A|Xs],[B,C|Ys],[D|Zs]):-
	!,
	D is A+B+C,
	f(Xs,[C|Ys],Zs).

f1([A|Xs],[B|Ys],[D|R]):-
	D is A+B,
	f(Xs,[B|Ys],R).

g([_],[1]):-!.
g([A,B|Xs],[C|Ys]):-
	!,
	C is A+B,
	g([B|Xs],Ys).
g1(Xs,[1|Ys]):-
	g(Xs,Ys).

h([X],[X]):-!.
h([X,Y|Zs],[R|Rs]):-
	f1(X,Y,R),
	!,
	h([Y|Zs],Rs).
h1([X|Xs],[R|Rs]):-
	g1(X,R),
	h([X|Xs],Rs).
最終更新:2015年10月30日 03:46