| 
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 |