?- goal.という具合に書きますが, ここでは,
(?- (living-thing dad))のようにdadはliving-thingかという形で問い合わせを行なう ことにします.もちろん変数を使ってもよく,
(?- (living-thing ?x))というようにすると?xにdadやqueen-elizabethがマッチするわけです. 通常のProlog処理系は,下のようなプログラム実行になります. これは,SICSTUS Prolog (http://www.sics.se/sicstus/) での実行例です.大文字が変数で,それぞれの述語が成り立つためには 変数がどうなっていなければならないかを表示します. セミコロンは,人間が対話的に入力している部分です.
| ?- use_module(library(lists)). % loading c:/program files/sicstus prolog 3.9.0/library/lists.po... % module lists imported into user % loaded c:/program files/sicstus prolog 3.9.0/library/lists.po in module lists, 321 msec 13632 bytes yes | ?- member(a, [b,a,c]). yes | ?- member(a, [b,c,d]). no | ?- member(X, [a,b,c]). X = a ? ; X = b ? ; X = c ? ; no | ?- member(b, [X,a,c]). X = b ? ; no | ?- member(a,[a,X,b]). true ? ; X = a ? ; no | ?- | ?- member(a,X). X = [a|_A] ? ; X = [_A,a|_B] ? ; X = [_A,_B,a|_C] ? ; X = [_A,_B,_C,a|_D] ? ; X = [_A,_B,_C,_D,a|_E] ? ; X = [_A,_B,_C,_D,_E,a|_F] ? . Top-level options: RET y no more choices ; n more choices b break ? h print this information ? b % Break level 1 % 1 | ?- | ?- length([a,b,c],X). X = 3 ? ; no | ?- length(X,3). X = [_A,_B,_C] ? ; no | ?- length(X, 2), member(a , X). X = [a,_A] ? ; X = [_A,a] ? ; no