-1

标题几乎说明了一切。

我正在寻找类似的东西

(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T

我可以用递归的方式来做,但我做不到。我应该使用一些内置功能吗?我在用着cLisp

4

3 回答 3

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))

但这并不能帮助您了解递归。

于 2013-03-10T01:16:07.917 回答
1

为我工作。(AutoCAD的AutoLisp)示例:

(repeat 100000 (setq longlist (cons nil longlist)))

然后

(setq longlist (append longlist (list 1)))

这是一个 100001 元素列表,最后只有 1 个非零元素。

(apply 'or longlist) 

返回 T。这不是正确答案还是列表不够长?

于 2018-03-20T22:39:20.920 回答
-1

关于什么:

(apply 'or '( your list here )) ;; ?
于 2018-03-18T12:03:22.053 回答