You have problems, and we're glad to hear them. Explain the problem, what you have tried, and where you got stuck.
Feel free to share a little info on yourself and the course.
Forum rules
Please respect your teacher's guidelines. Homework is a learning tool. If we just post answers, we aren't actually helping. When you post questions, be sure to show what you have tried or what you don't understand.
-
kiwifreak3
- Posts: 5
- Joined: Sat Jun 09, 2012 8:23 am
Post
by kiwifreak3 » Wed Aug 01, 2012 8:29 am
Hi,
I'm trying to write a recursive function returning the intersection of two given lists... I can't figure out why I'm getting the
error message: void function. I'd be grateful for help!
Code: Select all
(defun intersect(A B)
(if (eq A ())
A
(if (member (car A) B)
(push (car A) (intersect(cdr A) B))
(intersect(cdr A) B))))
(intersect'(1 2 3 4) '(0 1 2))
-
nuntius
- Posts: 538
- Joined: Sat Aug 09, 2008 10:44 am
- Location: Newton, MA
Post
by nuntius » Wed Aug 01, 2012 9:38 am
(PUSH obj place) is a macro that uses SETF to modify the place.
There is no SETF expander defined for (intersect ...) forms -- that's the undefined function problem.
Use CONS instead of PUSH, optionally tweak the whitespace, and it all works fine.
Code: Select all
(defun intersect (A B)
(if (eq A ())
A
(if (member (car A) B)
(cons (car A) (intersect (cdr A) B))
(intersect (cdr A) B))))
(intersect '(1 2 3 4) '(0 1 2))
-
kiwifreak3
- Posts: 5
- Joined: Sat Jun 09, 2012 8:23 am
Post
by kiwifreak3 » Wed Aug 01, 2012 1:42 pm
Thanks a lot nuntius!
works perfectly now!