in reply to Adding 2 + 2

sub S{ return [shift]; } sub P{ return (shift)->[0]; } sub add{ my($x,$y) = @_; return $x unless $y; return add(S($x),P($y)); } sub arabic{ my $x = shift; return 0 unless $x; return 1+arabic(P($x)); } $y=$x = S S; print arabic($x),"+",arabic($y),"=",arabic(add($x,$y)),"\n";