Location : Home > Languages > Perl > Package
Title : Language::Prolog::Interpreter
Toolbox Logo

名称

 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 本体と同等の条件で利用可能である。

Toolbox Logo
Updated : 2006/10/05