List LISP使用循环比较两个列表
我正在编写一个简单的函数来循环遍历一对列表,并为每个元素返回一个true或false,以确定其中一个符号是否为F 这是一长串函数的末尾,输入如下所示: "(F E E F E E) "(E F E F E E F E) 以下是目前的情况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)
(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)