diff --git a/lib/Minilisp.pm b/lib/Minilisp.pm index 166a261..dbd3b3c 100644 --- a/lib/Minilisp.pm +++ b/lib/Minilisp.pm @@ -162,6 +162,33 @@ my %stdctx = ( 'string-not-greaterp' => sub { my ($a, $b) = @_; return !(lc($a) gt lc($b)); }, 'string-not-lessp' => sub { my ($a, $b) = @_; return !(lc($a) lt lc($b)); }, + # Bitwise operations + 'logand' => sub { + my $v = -1; + $v &= $_ foreach (@_); + return $v; + }, + 'logior' => sub { + my $v = 0; + $v |= $_ foreach (@_); + return $v; + }, + 'logxor' => sub { + my $v = 0; + $v ^= $_ foreach (@_); + return $v; + }, + 'lognor' => sub { + my $v = -1; + $v |= $_ foreach (@_); + return ~$v; + }, + 'logeqv' => sub { + my $v = 0; + $v ^= $_ foreach (@_); + return ~$v; + }, + # Constants 't' => 1, 'f' => 0,