i’m having a problem with this lisp function. I want to create a function that receives two lists, and verifies if the elements of the first list (all of them) occur in the second list, it returns True if this happens.
Currently i have the following code:
(defun ocorre-listas (l1 l2)
(dolist (elem1 l1)
(dolist (elem2 l2)
(if (equal elem1 elem2)
t))))
It’s not working, as expected. Should i try to do it just with a simple recursion? I’m really not getting how i can iterate both lists in search of equal elements.
I decided to try without the dolists. This is what i have now, it’s still not working.
(defun ocorre-listas (l1 l2)
(cond ((null l1) nil)
((null l2) nil)
((if (/= (first l1)(first l2)) (ocorre-listas l1 (rest l2))))
(t (if (= (first l1) (first l2)) (ocorre-listas (rest l1)(rest l2))))))
I get a warning saying that “t” is an undefined function. Also, every example i try returns null. What am i doing wrong ?
In the second piece of code, if the first list is empty then all of its elements are in the second one.
You don’t need the
ifssince you are inside acondAfter test if the lists are empty, you’ll only need to test if the first element of the first list is in the second one and call the function again with the first list without this element