fun sum [ ] = 0 | sum (h::t) = h + (sum t); fun length [ ] = 0 | length (h::t) = 1 + (length t); #### multi sub sum () returns Int { 0 } multi sub sum (*$x, *@xs) returns Int { $x + sum(@xs) } multi sub length () returns Int { 0 } multi sub length (*$x, *@xs) returns Int { 1 + length(@xs) } #### sub sum { return 0 unless @_; my ($h, @t) = @_; return $h + sum(@t); } sub length { return 0 unless @_; shift; return 1 + length(@_); }