标题几乎说明了一切。
我正在寻找类似的东西
(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
我可以用递归的方式来做,但我做不到。我应该使用一些内置功能吗?我在用着cLisp
如果你处理列表的第一个元素,那么其余的都可以递归完成。代码是这样的:
(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))
但这并不能帮助您了解递归。
为我工作。(AutoCAD的AutoLisp)示例:
(repeat 100000 (setq longlist (cons nil longlist)))
然后
(setq longlist (append longlist (list 1)))
这是一个 100001 元素列表,最后只有 1 个非零元素。
(apply 'or longlist)
返回 T。这不是正确答案还是列表不够长?
关于什么:
(apply 'or '( your list here )) ;; ?