Lisp - lisp 的元素出现在其他列表中

标签 lisp

我对这个 lisp 函数有疑问。我想创建一个接收两个列表的函数,并验证第一个列表的元素(所有元素)是否出现在第二个列表中,如果发生这种情况,它会返回 True。

目前我有以下代码:

(defun ocorre-listas (l1 l2)
(dolist (elem1 l1)
    (dolist (elem2 l2)
        (if (equal elem1 elem2)
            t))))

它没有像预期的那样工作。我应该尝试只用一个简单的递归来做吗?我真的不知道如何迭代两个列表来寻找相等的元素。

我决定尝试不使用 dolists。这就是我现在拥有的,它仍然无法正常工作。

(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))))))

我收到一条警告说“t”是一个未定义的函数。此外,我尝试的每个示例都返回 null。我做错了什么?

最佳答案

在第二段代码中,如果第一个列表为空,则其所有元素都在第二个列表中。

你不需要 ifs 因为你在 cond

测试列表是否为空后,你只需要测试第一个列表的第一个元素是否在第二个列表中,然后用没有这个元素的第一个列表再次调用函数

关于Lisp - lisp 的元素出现在其他列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364272/

相关文章:

functional-programming - defun 和 defstruct 中的百分号

树中序遍历 LISP

lisp - 将两个列表附加在一起

loops - Clojure 循环读取一个额外的

lisp - 无法理解 LISP 中的一段代码

emacs - 如何在 elisp 中用变量替换硬编码字符串?

binary - 在方案( Racket )中更改二进制数中的特定索引位

lisp - 在 clozure common lisp 中读取错误

scheme - 这段 lisp 代码的 racket 翻译是什么?

web - 如何创建 Restas 全局装饰器