トップ «前の日記(2001-12-13) 最新 次の日記(2001-12-16)» 月表示 編集

日々の流転


2001-12-15 [長年日記]

λ. タイヤキおいしー

λ. 荒井惠美 クリスマス・チャリティ・コンサート Vol, Ⅱ

を聴きに行って来ました。

λ. Prologを作ろう!

別に片山さんに対抗してるわけじゃないんだけど、ちょっと前から考えてたので実装を始めてみた。(実はこのツッコミにもちょっと影響されてる)

さくっとデータ表現を決めて、ユニフィケーションとトレイル・スタックを実装した。でも、制御の流れをどうするかが一番面倒臭そうなので、その辺りは只今熟考中。なので、まだバックトラッキングは実装してないし、連言すら使えない。それでも一応こんな感じで幾つかの例が動き出して、ほんのり幸せ〜

λ. 例1.

# equal(X, X).
# ?- equal(X, 1).
prolog = Prolog.new
v = Prolog::VarSymbol.new(:X)
prolog.assert(Prolog::Compound.new(:equal, v, v))
prolog.solve(Prolog::Compound.new(:equal, v, 1))

λ. 例2.

# mortal(X) :- human(X).
# human(socrates).
# ?- mortal(socrates).
prolog = Prolog.new
v = Prolog::VarSymbol.new(:X)
prolog.assert(Prolog::Compound.new(':-'.intern,
                                   Prolog::Compound.new(:mortal, v),
                                   Prolog::Compound.new(:human, v)))
prolog.assert(Prolog::Compound.new(:human, :socrates))
prolog.solve(Prolog::Compound.new(:mortal, :socrates))