このディレクトリの索引
#  関数のソースコード or バイトコードを取得して 
#  実行時に書き換えられるかどうか 
# 
%  コードの実行時書き換えはどのような場合に可能か?
%  
%  下の例は簡単に可能。

:- dynamic(ならびの要素を削除する/2).


実行時のコードの書き換え(P,Q) :-
        retract(P),
        assertz(Q).

ならびの要素を削除する(_ならび,_削除されたならび) :-
        append(L0,[_|R],_ならび),
        length(L0,0),
        append(L0,R,_削除されたならび).

テストコード(_ならび,_削除されたならび) :-
        テストコード(1,_ならび,_削除されたならび).

テストコード(5,_ならび,_削除されたならび) :- !,fail.
テストコード(_,_ならび,_削除されたならび) :-
        ならびの要素を削除する(_ならび,_削除されたならび).
テストコード(N,_ならび,_削除されたならび) :-
        実行時のコードの書き換え((ならびの要素を削除する(_ならび_2,_削除されたならび_2) :-
        append(L0,[_|R],_ならび_2),
        length(L0,_),
        append(L0,R,_削除されたならび_2)),
        (ならびの要素を削除する(_ならび_2,_削除されたならび_2) :-
        append(L0,[_|R],_ならび_2),
        length(L0,N),
        append(L0,R,_削除されたならび_2))),
        N_2 is N + 1,
        テストコード(N_2,_ならび,_削除されたならび).