このディレクトリの索引

#
#  ガウス行列
#  
#  ガウス行列とは、行が下がるにごとに、最初に現れる0でない要素が、
#  右に移っていく行列のことをいいます。
#  
#  [問題] 引数で与えられた行列がガウス行列であるか診断する述語を定義しなさい。
#  


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ガウス行列(_行列) :-
        'ガウス行列とは、行が下がるごとに、最初に現れる0でない要素が右に移っていく行列のことをいいます'(_ガウス行列),!.


'ガウス行列とは、行が下がるごとに、最初に現れる0でない要素が右に移っていく行列のことをいいます'(_ガウス行列) :-
        行が下がるごとに最初に現れる0でない要素が(_ガウス行列,L),
        右に移っていく行列のことをいいます(L).

行が下がるごとに最初に現れる0でない要素が(_行列,L) :-
        findall(_最初に現れる0でない要素の変位,(
                    append(_,[_ガウス行列の行|_],_行列),
                    最初に現れる0でない要素の変位が(_ガウス行列の行,_最初に現れる0でない要素の変位)),
                L).

最初に現れる0でない要素の変位が(_ガウス行列の行,_最初に現れる0でない要素の変位) :-
        append(_0のみのならび,[_0でない要素|_],_ガウス行列の行),
        \+(_0でない要素 = 0),
        length(_0のみのならび,_最初に現れる0でない要素の変位),!.

右に移っていく行列のことをいいます([A]).
右に移っていく行列のことをいいます([A,B|R]) :-
        A < B,
        右に移っていく行列のことをいいます([B|R]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ガウス行列(_行列) :-
        ガウス行列([],_行列).

ガウス行列(_,[]) :- !.
ガウス行列(L,[_行|R]) :-
        全ての要素が0の行は無視し(L,_行,R),!.
ガウス行列(L,[_行|R]) :-
        それ以外では0以外の要素に出会うまでを収集(L,_行,R).

全ての要素が0の行は無視し(L,_行,R) :-
        all(_行,0),
        ガウス行列(L,R),!.

それ以外では0以外の要素に出会うまでを収集(L,_行,R) :-
        append(L,_,_行),
        要素がゼロ以外に出会うまで(_行,P1,L),
        ガウス行列([0|P1],R).

要素がゼロ以外に出会うまで([],[],[]) :- !.
要素がゼロ以外に出会うまで([A|R],[],[A|R]) :-
        \+((A = 0 ; A = 0.0e+00; A = 0 rdiv _)), !.
要素がゼロ以外に出会うまで([0|R],[0|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).
要素がゼロ以外に出会うまで([0 rdiv N|R],[0 rdiv N|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).
要素がゼロ以外に出会うまで([0.0e+00|R],[0.0e+00|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).


8&$\zGE (w7@@ c叫#vz齠H<8\%C W賤#ガウス行列診断
このディレクトリの索引

#
#  ガウス行列
#  
#  ガウス行列とは、行が下がるにごとに、最初に現れる0でない要素が、
#  右に移っていく行列のことをいいます。
#  
#  [問題] 引数で与えられた行列がガウス行列であるか診断する述語を定義しなさい。
#  


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ガウス行列(_行列) :-
        'ガウス行列とは、行が下がるごとに、最初に現れる0でない要素が右に移っていく行列のことをいいます'(_ガウス行列),!.


'ガウス行列とは、行が下がるごとに、最初に現れる0でない要素が右に移っていく行列のことをいいます'(_ガウス行列) :-
        行が下がるごとに最初に現れる0でない要素が(_ガウス行列,L),
        右に移っていく行列のことをいいます(L).

行が下がるごとに最初に現れる0でない要素が(_行列,L) :-
        findall(_最初に現れる0でない要素の変位,(
                    append(_,[_ガウス行列の行|_],_行列),
                    最初に現れる0でない要素の変位が(_ガウス行列の行,_最初に現れる0でない要素の変位)),
                L).

最初に現れる0でない要素の変位が(_ガウス行列の行,_最初に現れる0でない要素の変位) :-
        append(_0のみのならび,[_0でない要素|_],_ガウス行列の行),
        \+(_0でない要素 = 0),
        length(_0のみのならび,_最初に現れる0でない要素の変位),!.

右に移っていく行列のことをいいます([A]).
右に移っていく行列のことをいいます([A,B|R]) :-
        A < B,
        右に移っていく行列のことをいいます([B|R]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ガウス行列(_行列) :-
        ガウス行列([],_行列).


ガウス行列(_,[]) :- !.
ガウス行列(_,[_行|R]) :-
        全要素が0の行は無視する(L,_行,R),!.
ガウス行列(L,[_行|R]) :-
        append(L,_,_行),
        要素がゼロ以外に出会うまで(_行,P1,_),
        ガウス行列([0|P1],R).

全要素が0の行は無視する(L,_行,R) :-
        all(_行,0),
        ガウス行列(L,R).

要素がゼロ以外に出会うまで([A|R],[],[A|R]) :-
        \+((A = 0 ; A = 0.0e+00; A = 0 / _)), !.
要素がゼロ以外に出会うまで([0|R],[0|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).
要素がゼロ以外に出会うまで([0 / N|R],[0 / N|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).
要素がゼロ以外に出会うまで([0.0e+00|R],[0.0e+00|R1],R2) :-
        要素がゼロ以外に出会うまで(R,R1,R2).