next up previous
Next: 5 Prolog処理系の実現 Up: 4 論理型プログラミングとProlog Previous: 4.1 ホーン節の表現

4.2 問い合わせの表現

これに対して,問い合わせは,

?- 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


generated through LaTeX2HTML. M.Inaba 平成18年5月7日