/usr/local/CPAN/perl-lisp/Lisp/Cons.pm
package Lisp::Cons;
# Only used to represent (a . b) cons cells. The normal
# (a b c d) list is represented with a unblessed array [a,b,c,d]
use strict;
use vars qw(@EXPORT_OK);
require Exporter;
*import = \&Exporter::import;
@EXPORT_OK = qw(cons consp);
sub cons
{
Lisp::Cons->new(@_);
}
sub consp
{
UNIVERSAL::isa($_[0], "Lisp::Cons") || ref($_[0]) eq "ARRAY";
}
sub new
{
my($class, $car, $cdr) = @_;
bless [$car, $cdr], $class;
}
sub car
{
my $self = shift;
my $old = $self->[0];
$self->[0] = shift if @_;
$old;
}
sub cdr
{
my $self = shift;
my $old = $self->[1];
$self->[1] = shift if @_;
$old;
}
1;