20:00:10thesebThis leads to my main question.....(setf f ...) <---- Suppose you used f in the body of f (recursion!).....That won't work because when you evaluate the body of the function, f won't be defined!
20:00:41thesebIn other words, you *cannot* do recursion if you define functions this way...(setf f (lambda ...) )
20:04:19ieureThis isn't a Lisp specific thing. You resolve f in the body of the lambda when it's evaluated, not when it's defined.
20:04:56jcowanYou can use the Z-combinator, incorrectly known as the Y-combinator.
20:06:25thesebieure: i don't know the jargon really well...but I think when you evaluate functions, you *must* use the env at the time of the definition....i think it is called "lexical scoping" or "closure"
20:07:08thesebieure: I appreciate your "late binding" suggestion...but i'm guessing it would require me *not* using the *proper* binding format of lisp?
20:07:29pjbtheseb: (setf f (lambda (f x) (if (zerop x) 1 (* x (funcall f f (- x 1)))))) (funcall f f 10) #| --> 3628800 |#
20:07:36ieuretheseb, What do you think the "proper binding format of Lisp" is?
20:09:22pjbtheseb: have a look at Lisp in Small Pieces http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiSP.html http://pagesperso-systeme.lip6.fr/Christian.Queinnec/Books/LiSP-2ndEdition-2006Dec11.tgz
20:10:42thesebieure: i think this is called "lexical binding"?
20:11:28ieuretheseb, I don't think that's relevant to your issue.
20:11:32thesebpjb: yes but that is "cheating" because you are passing f as an argument of f?...possible to make it work w/o putting f in the param list?
20:13:20pjbtheseb: you can have a global external function table.
20:14:00thesebpjb: you mean a special additional env just for functions?
20:14:27pjbYes. Or it can be integrated for all the bindings. Depends on your language, you didn't specify.
20:15:20pjb#lisp is non-descript lisp. For specific lisps, see #scheme, #commonlisp, #emacs, etc.
20:21:15thesebpjb: i think this is easiest way to fix (setf f (lambda ...))....when you create the closure for (lambda ...) you need to remember to add f to that closure yes?
20:21:28thesebpjb: does closure mean "a function definition with that special env you use in invocations" ?
20:21:41thesebif it is then I'm happy and eternally grateful
20:22:43ieuretheseb, You should spend some time researching PLT if you're going to be implementing a language. https://en.wikipedia.org/wiki/Closure_(computer_programming)
20:23:33pjbtheseb: in CL, functions are looked up in the global environment too. If they're not lexical local functions (in the closure), then they're looked up as (fdefinition symbol-naming-the-function)
20:36:51thesebieure: yea...it is about time i learned what a closure is ;)
20:46:33thesebieure: pjb: thanks a million for all your help