Subject: Re: Returning Functions From: Erik Naggum <clerik@naggum.no> Date: 1997/10/10 Newsgroups: comp.lang.lisp Message-ID: <3085485174678128@naggum.no> * Joerg Hoehle | Emphasize this is only valid in ANSI CL which defines lambda as a | macro, but not in CLtL1 or CLtL2 Lisps. That might explain the | difference between Allegro and CLISP (a compile-only | vs. interpreter+compiler present inplementation might do as well). Allegro comes in to flavors: Windows and Unix (also available for NT). Allegro for Windows is an ancient Lisp, mostly CLtL1 with CLOS and a Windows-specific interface builder, and is compile-only as you say. Allegro for Unix is a modern Lisp, almost completely ANSI-conformant, and has both an interpreter and a compiler. they differ greatly in what they implement, in particular: one should not impute Windows limitations to Unix. to wit, I'm greatly impressed with the Unix version, and equally unimpressed with the Windows version. | The correct way of course was | (defvar *df* `(,#'(lambda () (do1)) ,#'(lambda (a) (do2 a)))) | without any coercion (you don't need to compile at run-time here). hm. I'd suggest optimizing for less syntactic hair: (defvar *df* (list (lambda () (do1)) (lambda (a) (do2 a)))) of course, with (optimize (hair 3)), we could always write (defvar *df '(#.#'(lambda () (do1)) #.#'(lambda (a) (do2 a)))) and force people to understand how this all works, but ... maybe not. #\Erik -- if you think this year is "97", _you_ are not "year 2000 compliant". see http://www.naggum.no/emacs/ for Emacs-20-related material.