unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* The Paul Graham's "Revenge of the nerds" cummulator function and the solution in Emacs Lisp
@ 2009-06-08 21:23 Tiago Charters de Azevedo
  2009-06-09  6:40 ` Tassilo Horn
  0 siblings, 1 reply; 3+ messages in thread
From: Tiago Charters de Azevedo @ 2009-06-08 21:23 UTC (permalink / raw)
  To: help-gnu-emacs

I've been reading  Paul Graham's "Revenge of the nerds"
(http://www.paulgraham.com/icad.html) particularly  the appendix. It states the
problem of writing "a function that generates accumulators-- a function that takes
a number n, and returns a function that takes another number i and returns n
incremented by i. (That's incremented by, not plus. An accumulator has to
accumulate.)"

Should not the function foo in Common Lisp  work with Emacs Lisp?

(defun foo (n)
  (lambda (i)     
    (incf n i))) 

by setting

(setq a (foo 3))

followed  by 

(funcall a 1)

When I try to evaluate (funcall a 1) in Emacs (in emacs-lisp mode) I get:

Debugger entered--Lisp error: (void-variable n)
  (+ n i)
  (setq n (+ n i))
  (incf n i)
  (lambda (i) (incf n i))(1)
  funcall((lambda (i) (incf n i)) 1)
  eval((funcall a 1))
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp


It seems that emacs considers that n is a local variable because it is inside a
lambda expression?

Is this a bug? Or I'm missing something?

Thanks

tca

-- 
URL: http://www.diale.org
Email: tca@cii.fc.ul.pt

Phone: +351 21 7904874 (internal: 4274)
Fax: +351 21 795 4288




^ permalink raw reply	[flat|nested] 3+ messages in thread
[parent not found: <mailman.243.1244499530.2239.help-gnu-emacs@gnu.org>]

end of thread, other threads:[~2009-06-09  6:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-08 21:23 The Paul Graham's "Revenge of the nerds" cummulator function and the solution in Emacs Lisp Tiago Charters de Azevedo
2009-06-09  6:40 ` Tassilo Horn
     [not found] <mailman.243.1244499530.2239.help-gnu-emacs@gnu.org>
2009-06-09  0:27 ` Barry Margolin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).