drkcore

2009/01/29 20:20:51

AI::Prolog

perlの実装でAI::Prologというのがあるが、インストールするとaiprologというコマンドがついてくる。

階乗を計算してみる。

fact(0, 1).
fact(X, Sum) :-
    X > 0, X1 is X - 1, fact(X1, Sum1), Sum is X * Sum1.

aiprologを起動

$ aiprolog fact.swi 

Welcome to AI::Prolog v 0.740
Copyright (c) 2005-2006, Curtis "Ovid" Poe.
AI::Prolog comes with ABSOLUTELY NO WARRANTY.  This library is free software;
you can redistribute it and/or modify it under the same terms as Perl itself.

Type 'help.' for for a list of built-ins or 'help("$builtin").' for help on a specific built-in.

?-fact(10,X). 

fact(10, 3628800) 

Yes

prologをいじってると宣言的ってのが「あーこういうことなのね」ってのがわかって楽しい。On LispでCommon Lispで実装するPrologとか読んである(継続とパターンマッチング)と内部でこういうことしてんのかなとか推測できるし。

ProductName On Lisp
ポール グレアム,野田 開
オーム社 / ¥ 3,990 ()
通常24時間以内に発送

あとでHOPの9章の宣言的プログラミングのとこも読み返そう。Prologを知ってると面白く読めるのかも。

ProductName Higher-order Perl: A Guide To Program Transformation
Mark Jason Dominus
Morgan Kaufmann Pub / ¥ 6,155 ()
通常24時間以内に発送

Comments