sub unify_all { my ($a, $b, $continuation) = @_; if (@$a == 0 && @$b==0) { $continuation->(); } elsif (@$a == @$b) { my ($v1, $v2) = (shift @$a, shift @$b); unify($v1, $v2, sub { unify_all($a, $b, $continuation) }); unshift @$a, $v1; unshift @$b, $v2; }; return(0); };