[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Lexical closures (bug?)
We were working thru the exercises in Charniak, Riesbeck & McDermot,
Artificial Intelligence Programming, and tried the following:
(defun compose (&rest functions)
#'(lambda (x)
(do ((fns functions (cdr fns))
(value x (funcall (car fns) value)))
((null fns) value))))
This should return the composition of the functions passed as
arguments; e.g. (compose #'1+ #'1+) should return a closure which should
increment its argument by 2:
(setq 2+ (compose #'1+ #'1+))
(funcall 2+ 4) => 6
However, when I try this on my 36xx, with either Genera 7.1 or 7.2, the
control stack overflows. In fact if I print the "(car fns)" it is
apparnet that in each iteration what is being funcalled is not the next
function, but the entire closure!
Any ideas?
Larry Baum