[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Pass by reference in LISP
- To: Info-MCL@cambridge.apple.com, jbk@world.std.com, straz@cambridge.apple.com
- Subject: RE: Pass by reference in LISP
- From: jbk@world.std.com (Jeffrey B Kane)
- Date: Tue, 30 Jun 92 17:27:42 -0400
Steve,
Thanks, I finally go things to work, although I'm still not sure exactly why!?!
I used your example and restructured the problem. This is a simplified test that
I did to get the method down correctly, and it worked fine.
? (defun test2 (n alist)
"Recursively calls itself exanding it's list"
;(declare (notinline test2))
(if (eql n 0)
nil
(setf alist (test2 (- n 1) alist)))
(if (oddp n)
(cons n alist)
alist))
TEST2
? (setf x nil)
NIL
? (setf x (test2 100 x))
I think I'm having the same kind of conceptual problem that I had when I went to
C++'s concept of passing by reference
short& somefunc(short& x) {
x = x * x;
return x;}
versus the more fundamental passing a pointer (which is in effect what you are
doing).
cons must be returning a pointer to a list, the problem that I'm having is that
I'm afraid that a new list is being made up each time I call my "test2" function
recursively. I wish there was some low level way I could follow along with LISP
so I can learn what it is actually doing as I call certain functions. In my
real problem the recursion could get VERY deep (and the list VERY long).
Jeffrey