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

名称

 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 本体と同様の条件で再配布・修正をしてもよい。

Toolbox Logo
Updated : 2006/07/15