From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Joost Kremers Newsgroups: gmane.emacs.help Subject: Re: Scheme to elisp Supersedes: Date: 16 May 2007 15:58:07 GMT Message-ID: References: <1179320194.826658.32840@p77g2000hsh.googlegroups.com> NNTP-Posting-Host: lo.gmane.org X-Trace: sea.gmane.org 1179333138 26698 80.91.229.12 (16 May 2007 16:32:18 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 16 May 2007 16:32:18 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed May 16 18:32:16 2007 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1HoMQB-0007sN-TP for geh-help-gnu-emacs@m.gmane.org; Wed, 16 May 2007 18:32:16 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HoMYB-0002H3-Mu for geh-help-gnu-emacs@m.gmane.org; Wed, 16 May 2007 12:40:31 -0400 Original-Path: shelby.stanford.edu!newshub.stanford.edu!news.tele.dk!news.tele.dk!small.news.tele.dk!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 46 Original-X-Trace: individual.net 4UyVaj+0ET2HJyuWclSVpQIpFMAW+tsEY6gjoLLojOzwRNtk0B X-Superseded-Date: 16 May 2007 15:56:15 GMT User-Agent: slrn/0.9.8.1 (Linux) Original-Xref: shelby.stanford.edu gnu.emacs.help:148449 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:44032 Archived-At: weber wrote: > Or in a simplified form, my problem is : why the snippet below does > not work? [note: the original indentation was confusing:] > (defun f (n) > (let ((g (lambda (x) (+ 5 x)))) > (g (+ n 1)))) > > (f 1) -> void-function g well, elisp is a lisp2, rather than a lisp1 (as scheme is), so a symbol can have both a value as a variable *and* a function definition. with let, you assign g a value *as a variable*, it does not affect the *function* definition of the symbol g. it is possible to assign an anonymous function as the variable value of a symbol. if you do this, you can use either funcall or apply (they have different uses) to call the (anonymous) function stored in the variable, like this: (defun f (n) (let ((g (lambda (x) (+ 5 x)))) (funcall g (+ n 1)))) alternatively, if you use the common-lisp compatibility package, you can use either flet or labels to create function bindings: (defun f (n) (flet ((g (x) (+ 5 x))) (g (+ n 1)))) note that with flet, you don't use anonymous functions. the syntax is: (flet (( . )) () ...) HTH -- Joost Kremers joostkremers@yahoo.com Selbst in die Unterwelt dringt durch Spalten Licht EN:SiS(9)