List LISP使用循环比较两个列表

List LISP使用循环比较两个列表,list,loops,common-lisp,List,Loops,Common Lisp,我正在编写一个简单的函数来循环遍历一对列表,并为每个元素返回一个true或false,以确定其中一个符号是否为F 这是一长串函数的末尾,输入如下所示: "(F E E F E E) "(E F E F E E F E) 以下是目前的情况 (defun finalcalc (tree1 tree2) (loop :for e1 :in tree1 :for e2 :in tree2 :nconc (if (or (eq e1 'F)

我正在编写一个简单的函数来循环遍历一对列表,并为每个元素返回一个true或false,以确定其中一个符号是否为F

这是一长串函数的末尾,输入如下所示:

"(F E E F E E) "(E F E F E E F E)

以下是目前的情况

    (defun finalcalc (tree1 tree2)
  (loop :for e1 :in tree1
        :for e2 :in tree2
        :nconc (if (or (eq e1 'F)
                       (eq e2 'F))
                   (print 'success))))
我在这里犯了一个错误。我不确定这是我的循环还是我的if语句。 它表明,我试图采取cdr的成功,这不是listp


有人能解释一下这个问题吗?

ncoc
以破坏性方式连接每次迭代的结果<代码>(打印“成功)打印成功并计算为不是列表的成功

试一试


谢谢我的错误仅仅是使用了:ncoc?@JT93,除了没有其他选择之外,是的<代码>:如果要从循环中创建新列表,则collect更常见。请看更多示例。
(defun finalcalc (tree1 tree2)
  (loop :for e1 :in tree1
        :for e2 :in tree2
        :collect (if (or (eq e1 'F)
                         (eq e2 'F))
                     'success
                     'failure)))
;; print result
(mapc #'print (finalcalc '(F E E E E F E E F F F F E E E E) '(E F E E E E E E F F F F E E F E)))
; ==> (success success failure failure failure success failure failure 
;      success success success success failure failure success failure)
; (and prints the words in order)