gfink@iris.UCDavis.EDU (George Fink) (04/04/91)
I am working on a program to be written in AKCL, and I wish to have dynamically created lambda expressions which have some sort of static symbol information specific to the expression. Is there a simple way/package to implement this, or is the best way to manually create a self-modifying a-list (or similar structure) to store the permanent information? For example, say I have the following expression (excuse syntactic errors):` (lambda () (let ((c 0)) (setq c (1+ c)) (if (= c 10) (do something)))) which is called intermittantly from my code - obviously, I want c to remain there between calls. But I am going to be creating these lambda expressions on the fly, albiet in some standard formats. Thanks, if you can help. Email me please. George Fink | gfink@iris.eecs.ucdavis.edu University of California, Davis | ucbvax!ucdavis!iris!gfink
moore%defmacro.utah.edu@cs.utah.edu (Tim Moore) (04/04/91)
In article <8693@ucdavis.ucdavis.edu> gfink@iris.UCDavis.EDU (George Fink) writes: >I am working on a program to be written in AKCL, and I wish to have >dynamically created lambda expressions which have some sort of static >symbol information specific to the expression. Is there a simple >way/package to implement this, or is the best way to manually create a >self-modifying a-list (or similar structure) to store the permanent >information? The best way to do this is to use closures. >For example, say I have the following expression (excuse syntactic errors):` > >(lambda () (let ((c 0)) (setq c (1+ c)) (if (= c 10) (do something)))) You would want to write that as (let ((c 0)) #'(lambda () (setq c (1+ c)) (if (= c 10) (do-something)))) This expression returns a lambda that when called will do what you want to do. >between calls. But I am going to be creating these lambda expressions >on the fly, >albiet in some standard formats. I'm not sure what you mean by this. The above expression will create a fresh lambda every time it is evaluated, with a new "cell" for c. If you are contemplating consing up lambda expressions and EVALing them, you might want to rethink your approach. -- Tim Moore moore@cs.utah.edu {bellcore,hplabs}!utah-cs!moore "Ah, youth. Ah, statute of limitations." -John Waters