Location : Home > Languages > Perl > Package Title : Language::Prolog::Interpreter |
![]() |
Language::Prolog::Interpreter - Prolog のための簡易版インタプリタ
Language::Prolog::Interpreter->readFile('E:/src/PROLOG/flamenco.pr');
または
$a = <<'EOPROLOG'; parent(john,sally). parent(john,joe). parent(mary,joe). parent(phil,beau). parent(jane,john). grandparent(X,Z) :-parent(X,Y),parent(Y,Z). EOPROLOG ; while ($a) { eval 'Language::Prolog::Interpreter->readStatement(\$a)'; $@ && die $@,$a,"\n"; $a=~s/^\s*//; } # 上記と同じ # 'Language::Prolog::Interpreter->readFile($pathtomyfile)'; と同等。 $a = '?- grandparent(GPARENT,GCHILD).'; print $a,"\n"; $Q = Language::Prolog::Interpreter->readStatement(\$a); while($Q->query()) { print "found solutions\n"; print 'GPARENT = ',$Q->variableResult('GPARENT'),"\n"; print 'GCHILD = ',$Q->variableResult('GCHILD'),"\n\n"; } print "no more solutions\n\n"; $a = 'member(A,[A|_]).'; $b = 'member(A,[_|B]) :- member(A,B).'; #Classic member Language::Prolog::Interpreter->readStatement(\$a); Language::Prolog::Interpreter->readStatement(\$b); $a = '?- member(c(V),[a(a),b(b),c(c),d(d),c(q)]).'; print $a,"\n"; $Q = Language::Prolog::Interpreter->readStatement(\$a); while($Q->query()) { print "found solutions\n"; print 'V = ',$Q->variableResult('V'),"\n\n"; } print "no more solutions\n\n";
infix 演算子を認めない(ただし :- 及び , を除く。双方ともビルトインされている。)簡易版のインタプリタである。
以下の3つの構文が利用可能である。
1. Clauses
. で終わる節(clause)。これはデータベースに追加される。
2. Rules
. で終わる規則(rule)。これは格納される。
3. Queries
?- で始まり . で終わる、コンマで区切られた節のリスト。query を生成し、返す。
コメント
複数行にわたるコメントは Java と同じように /** ... **/ で囲む。
単一行のコメントは % で始まるものとする。
空白
シングルクォート内のアトム(atom)以外は空白は無視される。
利用可能な項は以下のようなものである。
Lists1:
[]で囲まれたコンマで区切られた項のリスト。例えば
[Term1,Term2]
Lists2:
List1 と同様だが、最後の項は | で区切られている。例えば
[Term1,Term2|Variable]
Atoms1:
小文字から始まる文字/記号/アンダースコアの列。(すなわち \w キャラクタクラス) 例えば
this_Is_An_Atom
Atoms1:
シングルクォート(')で囲まれた文字列。例えば
'This is another atom!'
Variables:
小文字から始まる文字/記号/アンダースコアの列。(すなわち \w キャラクタクラス)の列。
This_is_a_var, _and_this, _90
Clauses:
左括弧 "(" 及びコンマで区切られた項のリストがそのあとに続き右括弧 ")" で終わるAtom1。例えば
clause(one), clause2(a,hello,'More !',[a,b,c])
Rules:
(場合より空白) :- (場合より空白)コンマで区切られた節の列からなる節。
Jack Shirazi
Shirzai氏は既に活動を停止しているようなので、Lee Goddard <lgoddard@cpan.org> が単数及び複数行のコメント・複数行の節のパースなどをサポートした。
Copyright (C) 1995, Jack Shirazi. All Rights Reserved.
Updates Copyright (C) 2001, Lee Goddard. All Rights Reserved.
Perl 本体と同等の条件で利用可能である。
![]() |
Updated : 2006/10/05 |