|
LISP::Lambda - Perl extension for implementing Lisp Lambda expressions |
LISP::Lambda - Perl extension for implementing Lisp Lambda expressions
use LISP::Lambda;
my $lambda = LISP::Lambda->new(\&sub);
$lambda->mapcar(@lists) $lambda->apply($list);
Lambda expressions are Lisp's version of anonymous subroutines, and may be blessed into this package so that you can use them or the provided 'meta-methods' in an object oriented way. If you want to want to use them as regular functions, you may export them. Any reference to lists here refers to linked lists ala Lisp, and not to perl lists/arrays.
mapcar(FUNCTION, LISTS)
mapcar applies the FUNCTION to the list formed by the first
element of each list, then to the second, etc., up to the
length of the shortest list, and returns a list of the results.
$list = LISP->new([[a],[b],[c],[d]]); # ((a) (b) (c) (d))
$car = $list->can('car');
$cars = $car->mapcar($list);
print $cars->string; # Prints (a b c d);
$list1 = LISP->new([qw(1 2 3)]]);
$list2 = LISP->new([qw(4 5 6)]]);
$lister = $list1->can('list');
$list3 = mapcar($lister, $list1, $list2);
print $list3->string # Prints ((1 4) (2 5) (3 6))
apply(FUNCTION, LIST)
apply returns the result of executing FUNCTION using the subnodes of
LIST as arguments.
$list = LISP->new([qw(1 2 3)]);
$totaller = sub { my $total=0; $total += $_ for @_; $total };
print apply($totaller, $list); # Prints 6
$inc = LISP->new(sub { map {$_ + 1} @_ });
my @ary = $inc->apply($list);
print "@ary"; # Prints 2 3 4
:all
exports methods mapcar and apply, and each may be exported individually.
Douglas Wilson, dwilson@gtemail.net
perl(1).
|
LISP::Lambda - Perl extension for implementing Lisp Lambda expressions |