Location : Home > Languages > Perl > Package Title : Language::Prolog::SWI |
![]() |
Language::Prolog::SWI - Perl extension for SWI-Prolog への Perl 拡張(オブジェクト指向インタフェース)
use Language::Prolog::SWI::base; # エンジンを生成(初期化) my $e = new Language::Prolog::SWI::PlEngine(); #知識を追加 Language::Prolog::SWI::PlCall ("assert(islocatedin(bonduni,robina))"); Language::Prolog::SWI::PlCall ("assert(islocatedin(robina,goldcoast))"); Language::Prolog::SWI::PlCall ("assert(islocatedin(goldcoast,qld))"); Language::Prolog::SWI::PlCall ("assert((islocatedin2(X,Z):-islocatedin(X,Z)))"); Language::Prolog::SWI::PlCall ("assert((islocatedin2(X,Z):-islocatedin(X,Y),islocatedin2(Y,Z)))"); # 項をバインド;ただし残りの1つではない my $t1 = new Language::Prolog::SWI::PlTerm ("bonduni"); my $t2 = new Language::Prolog::SWI::PlTerm (); # 項ベクトルを生成 my $av = new Language::Prolog::SWI::PlTermv ($t1, $t2); my $q = new Language::Prolog::SWI::PlQuery ("islocatedin2", $av); $q->DISOWN(); # 下記注釈を見よ # 全解にわたって繰り返し while ($q->next_solution) { warn "match ".$t1->toString." ".$t2->toString; }
本パッケージは http://www.swi-prolog.org/packages/pl2cpp.html で書かれた SWI-Prolog CPP API へのラッパであり、以下の例外を除くクラスの実装である。
C から Perl に変換されたパッケージが通常持つ問題にメモリ・アロケーションがある。これについては http://www.swig.org/Doc1.3/Perl5.html#n41 に詳しい説明がある。
本パッケージのユーザにとっては、これはいくつかのコンストラクタについてオブジェクト自身を削除しようとしてはならないということをラッパクラスに知らせるために DISOWN メソッド を呼び出さねばならないということを意味する。これは実装時に見ることで決定される時に発生する。申し訳ない。
もしセグメンテーション・フォールトにつきまとわれるなら明らかにアロケーションのバグがある。
README ファイルを見よ。
Robert Barta, <rho@bond.edu.au>
Perl
![]() |
Updated : 2007/09/26 |