##
sub length {
return 0 unless @_;
# manual pattern matching of the array here
my ($head, @tail) = @_;
return 1 + length(@tail);
}
####
member (X, []) -> false;
member (X, [X|_]) -> true;
member (X, [_|T]) -> member(X, T).
####
sub member {
my ($X, $head, @tail) = @_;
return 0 unless defined($head) && scalar @tail;
return 1 if $X == $head;
return member($X, @tail) if $X != $head;
}