このディレクトリの索引


井の頭線(渋谷,神泉).
井の頭線(神泉,駒場東大前).
井の頭線(駒場東大前,池ノ上).
井の頭線(池ノ上,下北沢).
井の頭線(下北沢,新代田).
井の頭線(新代田,東松原).
井の頭線(東松原,明大前).
井の頭線(明大前,永福町).
井の頭線(永福町,西永福).
井の頭線(西永福,浜田山).
井の頭線(浜田山,高井戸).
井の頭線(高井戸,富士見ヶ丘).
井の頭線(富士見ヶ丘,久我山).
井の頭線(久我山,三鷹台)..
井の頭線(三鷹台,井の頭公園).
井の頭線(井の頭公園,吉祥寺).


%%%%% 情報連鎖のある非決定性述語の一般型 %%%%%%%

q(X,Y) :-
        f(X,Z),
        q_1(X,Z,Y).

q_1(X,Y,Y).
q_1(X,Z,Y) :-
        q(Z,Y).
        
%  重いタスクf/2はqで実行するが、ここでは停止させずに、子述語を呼び出して、
%  そこで一旦停止。
%  バックトラックされてきたら、相互再帰でq/2を呼ぶ。q_1/3の仕事は再帰することと、引数情報の整理構成。

%  普通はq_1はqよりも引数が多くなる。従って同一の述語名を使用できることが多い。


%  井の頭線を例とする具体的述語

駅を辿る(_今居る駅,_次の駅) :-
        井の頭線(_今居る駅,_次の駅_1),
        駅を辿る(_今居る駅,_次の駅_1,_次の駅).

駅を辿る(_今居る駅,_次の駅,_次の駅).
駅を辿る(_今居る駅,_次の駅,_さらに次の駅) :-
        駅を辿る(_次の駅,_さらに次の駅).

%%%%%%%% f/2の実行が二回実行される形式定義 %%%%%%%%%

q(X,Y) :-
        f(X,Y).
q(X,Y) :-
        f(A,Z),
        q(Z,Y).


%  f/2 に入出力が絡むと時に致命的なこととなる。