#!/usr/bin/perl -w # summation examples from SICP done in Perl use strict; use warnings; my $result = &sum_integers(1, 3); print "sum_integers(1, 3) equals $result\n"; $result = &cube(3); print "cube(3) equals $result\n"; $result = &sum_cubes(1, 3); print "sum_cubes(1, 3) equals $result\n"; $result = &sum_cubes2(1, 3); print "sum_cubes2(1, 3) equals $result\n"; sub sum_integers { my ($a, $b) = @_; if ($a > $b) { return(0); } else { return( $a + &sum_integers(($a + 1), $b) ); } } sub cube { my ($a) = @_; return( $a * $a * $a ); } sub sum_cubes { my ($a, $b) = @_; if ($a > $b) { return(0); } else { return( &cube($a) + &sum_cubes(($a + 1), $b) ); } } sub sum { my ($term, $a, $next, $b) = @_; if ($a > $b) { return(0); } else { return( $term->($a) + &sum( $term, ($next->($a)), $next, $b) ); } } sub inc { my ($n) = @_; return( $n + 1 ); } sub sum_cubes2 { my ($a, $b) = @_; return( &sum(\&cube, $a, \&inc, $b) ); }