このディレクトリの索引
#  行列の中からn次の正方行列を切り取り、左上隅の行列位置と正方行列を返す。
#

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

起点行と生成行(_n,_起点行,_行数,L0,L) :-
length([_|L0],_起点行),_起点行 =< _行数,
length(L,_n),
( _起点行 + _n - 1 > _行数,!,fail ; true).


起点列と生成列(_n,_起点列,_列数,L01,L2) :-
length([_|L01],_起点列),_起点列 =< _列数,
length(L2,_n),
( _起点列 + _n - 1 > _列数,!,fail; true).

行列の行数と列数(_行列,_行数,_列数) :-
length(_行列,_行数),
_行列 = [L|_],
length(L,_列数).