Subject: Re: is this a portable CL? (rebind)
From: rpw3@rpw3.org (Rob Warnock)
Date: Thu, 08 Mar 2007 04:28:03 -0600
Newsgroups: comp.lang.lisp
Message-ID: <3KmdnbuVM9WueHLYnZ2dnUVZ_ozinZ2d@speakeasy.net>
I just wrote:
+---------------
| Though it would be a *lot* easier to read if written this way:
| 
|     > (loop for item in '(1 2 3 4 5)
| 	collect (let ((obj item)) (lambda () obj)))
| 
|     (#<Interpreted Function "LOOP FOR" {489410B1}>
|      #<Interpreted Function "LOOP FOR" {48941141}>
|      #<Interpreted Function "LOOP FOR" {489411D1}>
|      #<Interpreted Function "LOOP FOR" {48941261}>
|      #<Interpreted Function "LOOP FOR" {489412F1}>)
|     > (mapcar 'funcall *)
| 
|     (1 2 3 4 5)
|     > 
+---------------

It also works [in CMUCL, at least] when compiled:

    > (funcall
       (compile nil
	        (lambda ()
		  (loop for item in '(1 2 3 4 5)
		    collect (let ((obj item)) (lambda () obj))))))

    ; Compiling LAMBDA NIL: 
    ; Compiling Top-Level Form: 

    (#<Closure Over Function "LAMBDA NIL" {4895F0D1}>
     #<Closure Over Function "LAMBDA NIL" {4895F0E9}>
     #<Closure Over Function "LAMBDA NIL" {4895F101}>
     #<Closure Over Function "LAMBDA NIL" {4895F119}>
     #<Closure Over Function "LAMBDA NIL" {4895F131}>)
    > (mapcar 'funcall *)

    (1 2 3 4 5)
    > 


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607