next up previous
Next: 6 バックトラッキング Up: 5 Prolog処理系の実現 Previous: 5.7 問い合わせの応答

5.8 実行例

実行例を示します.

(defun example1 nil
  (init-prolog)
  (<- (human ?x) (woman ?x))
  (<- (human ?x) (man ?x))
  (<- (carnivore ?x) (human ?x))
  (<- (carnivore ?x) (human ?x) (eat ?x meat))
  (<- (vegetarian ?x) (human ?x) (eat ?x vegetables))
  (<- (living-thing ?x) (carnivore ?x))
  (<- (living-thing ?x) (vegetarian ?x))
  
  (<- (woman queen-elizabeth))
  (<- (man dad))
  (<- (eat queen-elizabeth meat))
  (<- (eat dad vegetables))
  )

<cl> (?- (living-thing dad))
Yes;
Yes;
<cl> (?- (living-thing ?x))

?X = QUEEN-ELIZABETH;
?X = DAD;
?X = QUEEN-ELIZABETH;
?X = DAD;
次のような一般的な手続きもプログラム可能です.

(defun example2 nil
  (<- (member ?item (?item . ?rest)))
  (<- (member ?item (?x . ?rest))
               (member ?item ?rest)))

<cl> (example2)
MEMBER 
<cl> (?- (member 2 (1 2 3)))
Yes;
<cl> (?- (member 2 (1 2 3 4 2)))
Yes;
Yes;
<cl> (?- (member ?x ( 1 2 3)))
?X = 1;
?X = 2;
?X = 3;

next up previous
Next: 6 バックトラッキング Up: 5 Prolog処理系の実現 Previous: 5.7 問い合わせの応答
generated through LaTeX2HTML. M.Inaba 平成18年5月21日