このディレクトリの索引

'対角要素は変数、対角要素より下はすべて_値1、上はすべて_値2であるようなN次の正方行列'(N,_値1,_値2,_対角以外値が埋め込まれた正方行列,_対角要素の変数ならび) :- length(L,N), '一行づつ_値1+_変数+_値2のならびを構成していく'(L,_値1,_値2,LY), 正方行列と変数ならびに分離(LY,_対角以外値が埋め込まれた正方行列,_対角要素の変数ならび). '一行づつ_値1+_変数+_値2のならびを構成していく'(L,_値1,_値2,LY) :- findall([_列ならび,_対角部分の変数],( '一行取り出して_値1+_変数+_値2となる行を構成'(L,L1,L2,_値1,_値2,_列ならび,_対角部分の変数)),LY). '一行取り出して_値1+_変数+_値2となる行を構成'(L,L1,L2,_値1,_値2,_列ならび,_対角部分の変数) :- 一行取り出して(L,L1,_変数,L2), '_値1+_変数+_値2となる行を構成'(L1,L2,_値1,_値2,_列ならび,_対角部分の変数). 一行取り出して(L,L1,_変数,L2) :- append(L1,[_変数|L2],L). '_値1+_変数+_値2となる行を構成'(L1,L2,_値1,_値2,_列ならび,_変数) :- 'L1を_値1で埋め'(_値1,L1), 'L2を_値2で埋め'(_値2,L2), 列ならびを再構成する(L1,L2,_列ならび,_変数). 'L1を_値1で埋め'(_値1,L1) :- all(L1,_値1). 'L2を_値2で埋め'(_値2,L2) :- all(L2,_値2). 列ならびを再構成する(L1,L2,_列ならび,_変数) :- append(L1,[_変数|L2],_列ならび). 正方行列と変数ならびに分離([],[],[]) :- !. 正方行列と変数ならびに分離([L1|R1],[L|R2],[V|R3]) :- select(V,L1,L),var(V), 正方行列と変数ならびに分離(R1,R2,R3). all([],_). all([V|R],V) :- all(R,V). 'n×n行列の対角要素'(_n,_行列,_対角要素ならび) :- length(L,_n), findall([V,L2],select(V,L,V,L2),Lx), 分離(Lx,_行列,_対角要素ならび). 行列の対角要素(_行列,_対角要素ならび) :- length(L,_n), findall([V,L2],select(V,L,V,L2),Lx), 分離(Lx,_行列,_対角要素ならび),!. 分離([],[],[]). 分離([[V,L]|R1],[L|R2],[V|R3]) :- 分離(R1,R2,R3).