next up previous
Next: 5.7 問い合わせの応答 Up: 5 Prolog処理系の実現 Previous: 5.5 ホーン節の変数名の変更

5.6 問い合わせ部分

データベースへの問い合わせは,

(defmacro ?- (&rest goals) `(prove-all ',goals))
というようなマクロで行なえる. しかしこれでは,
<cl> (?- (living-thing dad))
(((#:?X109 . DAD) (#:?X107 . DAD) (#:?X106 . DAD))
 ((#:?X116 . DAD) (#:?X114 . DAD) (#:?X113 . DAD)))
というような事実の問い合わせに対してYESを返してほしいのに, 返さないのでわかりにくい. また,
<cl> (?- (living-thing ?x))
(((#:?X97 . QUEEN-ELIZABETH) (#:?X96 . #:?X97)
  (#:?X95 . #:?X96) (?X . #:?X95))
 ((#:?X98 . DAD) (#:?X96 . #:?X98) (#:?X95 . #:?X96)
  (?X . #:?X95))
 ((#:?X100 . QUEEN-ELIZABETH) (#:?X99 . #:?X100)
  (#:?X95 . #:?X99) (?X . #:?X95))
 ((#:?X105 . DAD) (#:?X103 . #:?X105)
  (#:?X102 . #:?X103) (?X . #:?X102)))
というように変数で問い合わせを行なうと答えの中に 問い合わせに用いた変数以外の変数も現れるため 非常にわかりにくい.

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