grandparent(A,B) :- parent(A,C),parent(C,B). father(F,C) :- male(F),parent(F,C). parent(tom,jane). parent(tom,jim). parent(mary,jane). parent(jack,sam). parent(jane.sam). parent(jim.bob). parent(betty,bob). male(tom). male(jack). male(jim). male(sam). male(bob). female(mary). female(jane). female(betty).で、これらの Prolog で書かれた知識データベースを Smalltalk の継続に置き換えて(あと、失敗や、パターンマッチング、ユニフィケーションのためのいたずらを少々加えて) PrologModoki class のメソッドとして登録しました。この状態で、
PrologModoki male: #jack and: [^ true]などとすると
?- male(#jack).と似たような動きで true が返ります。PrologModokiVariable なんてのを作りましたので、これのインスタンスを変数代わりに用いて、
| result results | results _ OrderedCollection new. PrologModoki male: (result _ PrologModokiVariable new) and: [results add: result value]. ^ resultsなどとすると、
?- male(X).もどきになって、
an OrderedCollection(#tom #jack #jim #sam #bob)が得られます。他にも、
| results result | results _ OrderedCollection new. PrologModoki father: (result _ PrologModokiVariable new) of: #bob and: [results add: result value]. ^ results(ボブの父親は誰か?)とか、
| result results | results _ OrderedCollection new. PrologModoki grandParent: (result _ PrologModokiVariable new) of: #sam and: [results add: result value]. ^ results(サムの祖父母は誰か?)とかできます。階乗も
| x | PrologModoki factorial: 100 is: (x _ PrologModoki var new) and: [^ x value]それっぽく動いてくれているようです。--sumim
PrologModoki search: 1 position: #a path: #() and: [^ true]PrologModoki.st も、知識データベースの追加とちょっとした手直しがあったので昨夜のと差し替えてあります。--sumim
このページを編集 (3062 bytes)
以下の 1 ページから参照されています。 |
This page has been visited 4381 times.