The idea was to use the same logic, that is, recursive logic. Also the iterator is supplied to the sum subroutine in my example (as it is given in the LISP version). By using codereferences instead of normal subroutines, you simplified the passing of arguments. This has the effect, however, of making $sq and $id no longer callable in the same fashion as sum_sq is.
I like your use of //=, but I think the brevity of your code is due to simplification of, and less-strict adherence to, the LISP example.