我正在编写一个简单的函数来遍历一对列表,并为每个元素返回一个true或false,以确定其中一个符号是否为F.
这是一长串函数的结尾,输入如下:
'(F E E E E E F F F F E E E) '(E E E E E E F F F 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。
有人可以解释这个问题吗?
答案 0 :(得分:2)
nconc
破坏性地连接每次迭代的结果。 (print 'success)
打印成功并评估成功而非列表。
尝试
(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)