【发布时间】:2018-02-18 11:52:28
【问题描述】:
我的任务是查找给定元素是否包含在列表(非线性列表)中。这是我现在写的,但是这个函数的返回值是一个列表,我真的不明白为什么。
(setq E 4)
(defun IsMember (L)
(cond
((equal E L)
T
)
((atom L)
NIL
)
(T
(or (mapcar 'IsMember L))
)
)
)
(print (IsMember '(1 2 3 (((4) 5) 6))))
返回值为:(NIL NIL NIL (((T) NIL) NIL))
但如果在给定列表中找不到E,它应该真正输出T 或NIL。
【问题讨论】:
-
一个参数的OR是什么?
-
我想对包含
T或NIL的整个列表进行OR运算,最终结果是,如果列表中至少有一个T,则调用返回T,否则NIL,据我所知,mapcar 返回一个列表,但我仍然无法弄清楚这里出了什么问题 -
但您不是在元素上应用 or,而是在列表本身上应用。更好地查看函数 SOME。
-
(some 'or (mapcar 'IsMember L))->*** - FUNCALL: OR is a special operator, not a function -
不要使用 OR 或 MAPCAR,使用 SOME
标签: lisp common-lisp logical-operators