このディレクトリの索引
#  
#  右下方向に縮小しながら正方行列を切り取る。
#

右下方向に縮小しながら正方行列を切り取る(_正方行列,_正方行列).
右下方向に縮小しながら正方行列を切り取る(_正方行列1,_正方行列) :-
        length(_正方行列1,_n),
        _n_1 is _n - 1,
        行列の中から正方行列を切り取る(_正方行列1,_n_1,2,2,_同一の要素,_正方行列2),
        右下方向に縮小しながら正方行列を切り取る(_正方行列2,_正方行列).

行列の中から正方行列を切り取る(_行列,_n,_起点行,_起点列,_正方行列) :-
        length([_|L0],_起点行),
        length(L,_n),
        length([_|L01],_起点列),
        length(L2,_n),
        append(L0,L,R1,_行列),
        findall(L2,(
                   append(_,[L3|_],L),
                   append(L01,L2,_,L3)),
                _正方行列).

最終列を拾う([],[]) :- !.
最終列を拾う([L|R1],[A|R2]) :-
        last(L,A),
        最終列を拾う(R1,R2).

第n列を拾う(_n,[],[]) :- !.
第n列を拾う(_n,[L|R1],[A|R2]) :-
        nth1(_n,L,A),
        第n列を拾う(_n,R1,R2).

第m列から第n列まで拾う(_m,_n,_,[]) :-
        _m > _n,!.
第m列から第n列まで拾う(_m,_n,_行列,[L|R]) :-
        第n列を拾う(_m,_行列,L),
        _m2 is _m + 1,
        第m列から第n列まで拾う(_m2,_n,_行列,R).