計算量N^2の方法による解法。 search(R,[L],[R],L):-!. search(R,[L|Ls],[R|Ls],L):- nth1(1,L,U), U =\= 0, !. search(R,[L|Ls],[L|Ls1],L1):- search(R,Ls,Ls1,L1). dell(_,[],[],[]):-!. dell(M,[X|Xs],[Y|Ys],[Z|Zs]):- Z is Y-X*M, dell(M,Xs,Ys,Zs). mult(Dell,Num,Num1):- Dell=\=0,Num1 is Num/Dell. mult(_,Num,Num):-!. dell_List(_,[],[]):-!. dell_List(L,[L1|Ls1],[L2|Ls2]):- [E|_]=L, [E1|_]=L1, mult(E,E1,M), dell(M,L,L1,L2), dell_List(L,Ls1,Ls2). dell_top([],[]):-!. dell_top([[_|Ls]|Ls1],[Ls|Result]):- dell_top(Ls1,Result). gyouretu_t([[E]],[E1],S):-!,write([e,E,S]),E1 is E*S. gyouretu_t(Mat,[E|Result],S):- [R|Mat1]=Mat, [E|_]=R, ((E =\=0 ->Mat2 = Mat1,S1 is S,L = R);(search(R,Mat1,Mat2,L)),S1 is -S), dell_List(L,Mat2,Mat3), dell_top(Mat3,Mat4), [E|_]=L, write(S1), gyouretu_t(Mat4,Result,S1). mult_list([],M,M):-!. mult_list([X|Xs],M,R):- M1 is M*X, mult_list(Xs,M1,R). gyouretu_tW(Mat,Ans):- gyouretu_t(Mat,Es,1), write(Es), mult_list(Es,1,Ans).