NAME

LISP::Lambda - Perl extension for implementing Lisp Lambda expressions

SYNOPSIS

use LISP::Lambda;

my $lambda = LISP::Lambda->new(\&sub);

$lambda->mapcar(@lists)
$lambda->apply($list);

DESCRIPTION

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.

Methods

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

EXPORT

:all
	 exports methods mapcar and apply, and each may be exported individually.

AUTHOR

Douglas Wilson, dwilson@gtemail.net

SEE ALSO

perl(1).