2001-12-15 [長年日記]
λ. タイヤキおいしー
λ. 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))