このディレクトリの索引

行列の置換(_列,_行,_置換要素,_対象行列,_置換された表)
  :-
    list_nth(_行,_対象行列,_対象行),
    要素番号によるならびの置換(_列,_置換要素,_対象行,_置換された行),
    要素番号によるならびの置換(_行,_置換された行,_対象行列,_置換された表),!.

ならびの置換(_対象要素,_置換要素,_対象ならび,_置換ならび)
  :-
    append(_前半のならび,[_対象要素|_残り対象要素ならび],_対象ならび),
    append(_前半のならび,[_置換要素|_残り対象要素ならび],_置換ならび),!.

ならびの置換(X,[],X) :- !.
ならびの置換([],X,X) :- !.
ならびの置換([A|R],[A|R1],[A|R2])
  :-
    ならびの置換(R,R1,R2).
ならびの置換([A|R],[B|R1],[A|R2])
  :-
    ならびの置換(R,R1,R2).

要素番号によるならびの置換(_要素番号,_置換要素,_対象ならび,_置換ならび)
  :-
    update_list(_要素番号,_置換要素,_対象ならび,_置換ならび),!.

update_list(Pos,U,P,Q)
  :-
    integer(Pos),!,
    update_list(1,Pos,U,P,Q).
update_list(Pos,U,P,Q)
  :-
    not(integer(Pos)),
    not(Pos =.. [',',Pos1,Rpos]),
    Pos1 is Pos,
    update_list(1,Pos1,U,P,Q).
update_list(Pos,U,P,Q)
  :-
    Pos =.. [',',Pos1,Rpos],
    update_list(1,Pos1,Rpos,U,P,Q).

update_list(_,_,_,_,[],[]):-!.
update_list(_,V,Rpos,U,[A|R],[B|R1])
  :-
    var(V),!,
    update_list(Rpos,U,A,B),
    update_list(_,V,Rpos,U,R,R1).
update_list(E,E,Rpos,U,[A|R],[B|R1])
  :-
    update_list(Rpos,U,A,B),
    update_list(R,R1).

update_list(S,E,Rpos,U,[A|R],[A|R1])
  :-
    S1 is S+1,
    update_list(S1,E,Rpos,U,R,R1).

update_list(E,E,U,[A|R],[U|R1])
  :-
    update_list(R,R1).
update_list(S,E,U,[A|R],[A|R1])
  :-
    S1 is S+1,
    update_list(S1,E,U,R,R1).

update_list([],[]):-!.
update_list([A|R],[A|R1])
  :-
    update_list(R,R1).