unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Functions returning functions in Emacs Lisp
@ 2008-04-16  3:18 srinik001
  2008-04-16  4:33 ` Barry Margolin
  0 siblings, 1 reply; 6+ messages in thread
From: srinik001 @ 2008-04-16  3:18 UTC (permalink / raw)
  To: help-gnu-emacs

Hi,

I am trying to learn Emacs Lisp. I know a bit of (Common) Lisp and was
trying the following on Emacs. This is to define a function called
derivative, which returns as its result a function which is the
derivative of the argument function fn, when the numerical calculation
is done over delta. So I did the following.

(defun derivative (fn delta)
  #'(lambda(x) (/ (- (funcall fn (+ x delta)) (funcall fn x)) delta)))

--> this seemed to work (i.e. no error on C-x C-e)

(setq c (derivative #'sin 0.001))

--> this seemed to work (again, no error on evaluation)

(funcall c (/ 3.1415 2))

--> this threw up an error. The error is the following:

Debugger entered--Lisp error: (void-variable fn)
  (funcall fn (+ x delta))
  (- (funcall fn (+ x delta)) (funcall fn x))
  (/ (- (funcall fn ...) (funcall fn x)) delta)
  (lambda (x) (/ (- ... ...) delta))(1.57075)
  funcall((lambda (x) (/ (- ... ...) delta)) 1.57075)
  eval((funcall c (/ 3.1415 2)))
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp)

I tried lambda expressions on mapcar, and it seemed to work on Emacs
the way it does in Common Lisp. Could someone please tell me if I am
doing something wrong vis-a-vis Emacs, or if Emacs does not support
this? Thanks.

Regards,

SK


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-04-16 13:33 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-16  3:18 Functions returning functions in Emacs Lisp srinik001
2008-04-16  4:33 ` Barry Margolin
2008-04-16  5:22   ` srinik001
2008-04-16  8:06     ` David Hansen
2008-04-16  9:05     ` Tim X
2008-04-16 13:33       ` Lennart Borgman (gmail)

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).