 
 
 
 
 
   
 Next: 5 Prolog処理系の実現
Up: 4 論理型プログラミングとProlog
 Previous: 4.1 ホーン節の表現
 
これに対して,問い合わせは,
 
?- 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日