diff --git a/lib/Minilisp.pm b/lib/Minilisp.pm index a83d491..1d5dc1e 100644 --- a/lib/Minilisp.pm +++ b/lib/Minilisp.pm @@ -409,6 +409,23 @@ my %stdctx = ( return length($a); } }, + 'apply' => sub { + my ($fn, $lst) = @_; + die "apply: First operand must be a function" + unless ref($fn) eq "CODE"; + die "apply: Second operand must be a list" + unless ref($lst) eq "ARRAY"; + + return $fn->(@$lst); + }, + + # Input/output + 'read-line' => sub { + my $fh = shift; + my $val = defined($fh) ? <$fh> : <>; + chomp $val; + return $val; + } ); sub parser {