Subject: Re: how does recursion work?
From: Erik Naggum <erik@naggum.net>
Date: 16 Oct 2000 00:25:01 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3180644701864385@naggum.net>

* Xenophon Fenderson the Carbon(d)ated
| Basically, as far as the translator is concerned (it's much the same
| for compilers as for interpreters), it sees your function as follows:
| 
| (FUNCTION-OF-N-ARGUMENTS
|  :arg-names-list ("M" "N")
|  :body ((IF-FORM
| 	 :test (FUNCTION-CALL
| 		:func-name "ZEROP"
| 		:arg-list ((VARIABLE-REFERENCE :symbol-name "M")))
| 	 :then-clause (INTEGER-LITERAL :value 1)
| 	 :else-clause (FUNCTION-CALL
| 		       :func-name "*"
| 		       :arg-list ((VARIABLE-REFERENCE :symbol-name "M")
| 				  (FUNCTION-CALL
| 				   :func-name "RECUR-EXPT"
| 				   :arg-list ((VARIABLE-REFERENCE :symbol-name "M")
| 					      (FUNCTION-CALL
| 					       :func-name "-"
| 					       :arg-list ((VARIABLE-REFERENCE :symbol-name "N")
| 							  (INTEGER-LITERAL :value 1))))))))))
| 
| This is called an "abstract syntax tree" and in mentioned in greater
| detail in the texts to which I refer you.

  Which (Common) Lisp implementation did you dig this stuff out of?

  If you made it up on the spot, and it looks like you did because you
  missed the fundamental idea in (Common) Lisp that symbols are not
  named in some silly "abstract syntax trees" by their _string_ names,
  would you apologize to the poor sap you lied to and retract it all?
  
#:Erik
-- 
  I agree with everything you say, but I would
  attack to death your right to say it.
				-- Tom Stoppard