LISP 使用循环比较两个列表
LISP compare two lists using a loop
我正在编写一个简单的函数来循环遍历一对列表,并且 return 每个元素的 true 或 false 是否有一个符号是 F。
这是一长串函数的末尾,输入如下所示:
'(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)
这是目前的样子。
(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 语句。
它指出我试图获取不是 listp 的成功 cdr。
有人可以解释一下这个问题吗?
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)
我正在编写一个简单的函数来循环遍历一对列表,并且 return 每个元素的 true 或 false 是否有一个符号是 F。
这是一长串函数的末尾,输入如下所示:
'(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)
这是目前的样子。
(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 语句。 它指出我试图获取不是 listp 的成功 cdr。
有人可以解释一下这个问题吗?
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)