http://search.cpan.org/~ambs/Acme-Lisp-0.03/lib/Acme/Lisp.pm
下記のようにLispの計算を評価してくれます。
use strict; use warnings; use Acme::Lisp; # 引き算 my $lisp_code = [ qw(- 1 2 3 4) ]; print eval_lisp($lisp_code) ,"\n"; # 再帰的なリストも評価できる my $rec_code = [qw(+ 1 2)]; my $lisp_code2 = [qw(- 1 2 3),$rec_code]; print eval_lisp($lisp_code2) , "\n";
Acme::Lispでは、下記のような形で、算術処理を記述しています。
BEGIN { $eval{'+'} = sub { my $ans = 0; $ans += $_ for @_; return $ans }; $eval{'-'} = sub { my $ans = shift @_; $ans -= $_ for @_; return $ans }; $eval{'*'} = sub { my $ans = 1; $ans *= $_ for @_; return $ans }; $eval{'/'} = sub { my $ans = shift @_; for (@_) { if ($_) { $ans /= $_ } else { die "division by zero\n" }}; return $ans }; $eval{'exit'} = sub { exit }; $eval{'quit'} = sub { exit }; }
四則演算のみ定義してますね。