Location : Home > Languages > Perl > Package Title : Language::Prolog::Sugar |
![]() |
Language::Prolog::Sugar - Prolog のためのコンストラクタ定義
use Language::Prolog::Sugar vars => [qw(X Y Z)]; use Language::Prolog::Sugar functors =>{ equal => '=', minus => '-' }; use Language::Prolog::Sugar functors =>[qw(is)]; use Language::Prolog::Sugar atoms =>[qw(foo bar)]; use Language::Prolog::Sugar atoms =>{ cut => '!' }; use Language::Prolog::Sugar chains =>{ andn => ',', orn => ';' }; $term=andn( equal(X, foo), orn( equal(Y, [4, bar]), equal(Y, foo)), cut, is(Z, minus(34, Y)));
本モジュールは Prolog のためのコンストラクタ定義を容易にする。
Language::Prolog::Sugar は Language::Prolog::Types モジュールにおいて定義された Prolog 表現を生成するためのサブルーティンを呼び出しエクスポートすることができる。
このコンストラクタを用いる Perl プログラムは本当の Prolog のプログラムと同じように見える。
残念だが Prolog の演算子文法は私の知っているいかなる方法でもシミュレートすることができなかった。(いくつかはオーバーロードすればできるのだが、少しだけだ。)
望みどおり何でも。
Language::Prolog::Sugar はProlog の4つの型のコンストラクタを生成することができる。文法は以下のようなものである。
use Language::Prolog::Sugar $type1s=>{ $name1 => $prolog_name1, $name2 => $prolog_name2, ... }, ...
または
use Language::Prolog::Sugar $type2s=>[qw($name1 $name2 ...)], ...
$type1s, $type2s, ... は atoms, functors, vars または chains である。
$name1, $name2, ... は呼び出し側のパッケージにエクスポートされるサブルーティンの名称である。
$prolog_name, $prolog_name2, ... は Prolog 表現で作成された時にコンストラクタが用いる名称である。すなわち、
use Language::Prolog::Sugar atoms=>{ cut => '!' }
は呼び出されたときに Prolog における atom である ! を返すサブルーティン cut をエクスポートする。
use Language::Prolog::Sugar functor=>{ equal => '=' }
は呼び出されたときに Prolog における functor である = を返すサブルーティン equal をエクスポートする。
equal(3,4)
は
'='(3,4)
を返す。
functor の数は引数の数によって指定される。
equal(3, 4, 5, 6, 7)
は
'='(3, 4, 5, 6, 7)
を返す。
Prolog のプログラムにおいて ','/2 または ';'/2 演算子で表現される構造を 'chain' と呼ぶ。
すなわち Prolog のプログラム
p, o, r, s.
は実際には
','(p, ','(o, ','(r, s))).
であり、 chains を用いて、もっと簡単な構成で表現できる。
use Language::Prolog::Sugar chains => { andn => ',' }, atoms => [qw(p o r s)];
及び
andn(p, o, r, s)
は上記のプログラム例の Prolog 構造を生成する。
Language::Prolog::Types, Language::Prolog::Types::Factory
Salvador Fandino, <sfandino@yahoo.com>
Copyright 2002 by Salvador Fandino
本プログラムはフリーソフトであり、Perl 本体と同様の条件で再配布・修正をしてもよい。
![]() |
Updated : 2006/07/15 |