このディレクトリの索引
#  
#  ガウス行列とは、行が下がるごとに、最初に現れる0でない要素が、
#  右に移っていく行列のことをいいます。
#  

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

'行が下がるごとに、最初に現れる0でない要素が右に移っていく'([_]).
'行が下がるごとに、最初に現れる0でない要素が右に移っていく'([_行1,_行2|R]) :-
        先頭から連続する0ならび(_行1,_先頭から連続する0ならび_1),
        先頭から連続する0ならび(_行2,_先頭から連続する0ならび_2),
        append(_先頭から連続する0ならび_1,[_|_],_先頭から連続する0ならび_2),
        '行が下がるごとに、最初に現れる0でない要素が右に移っていく'(R).

先頭から連続する0ならび(_行,_先頭から連続する0ならび) :-
        append(_先頭から連続する0ならび,[N|_],_行),
        \+(N = 0),!.

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

行列(_行列) :-
        findall(_要素数,(
                    append(_,[_行|_],_行列),
                    すべて数値(_行),
                    length(_行,_要素数)),
                L),
        all(L,N).

すべて数値([]).
すべて数値([V|R]) :-
        number(V),
        すべて数値(R).
すべて数値([V|R]) :-
        分数(V),
        すべて数値(R).

分数(V1/V2) :-
        number(V1),
        number(V2).

all([],_).
all([V|R],V) :-
        all(R,V).