标题几乎可以说明一切。
我正在寻找像
这样的东西(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
我可以以递归的方式做到,但我做不到。我应该使用一些内置功能吗?
我正在使用cLisp
答案 0 :(得分:2)
如果你处理列表的第一个元素,那么所有其余元素都可以递归完成。代码是这样的:
(defun at-least-one-nonnil (l)
(and (not (nullp l))
(or (car l)
(at-least-one-nonnil (cdr l))))))
当然,在这个简单的情况下,已经有了内置函数。
(defun at-least-one-nonnil-v2 (l)
(some #'identity l))
但这并不能帮助您了解递归。
答案 1 :(得分:1)
适合我。(AutoCAD' AutoLisp)示例:
(repeat 100000 (setq longlist (cons nil longlist)))
然后
(setq longlist (append longlist (list 1)))
这是一个100001元素列表,最后只有1个非nil元素。
(apply 'or longlist)
返回T. Isn这是正确答案还是列表不够长?
答案 2 :(得分:-1)
怎么样:
(apply 'or '( your list here )) ;; ?