简单的问题。从列表中删除NIL's LISP
假设我在列表q中有一堆NIL。有没有简单的方法来删除NIL并保持数字? eval在这里似乎不起作用。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 4)
简单的问题。从列表中删除NIL's LISP
假设我在列表q中有一堆NIL。有没有简单的方法来删除NIL并保持数字? eval在这里似乎不起作用。
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要(1 2 3 4)
Common Lisp的保持,而不是只从你的列表l
号码,删除,如果你可以使用删除:
(remove nil '(nil 1 nil 2 nil 3 nil 4))
Common Lisp中,也许还有其他方言:
(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
用户“规格”有一个更直接的答案。 – 2012-02-20 18:26:05
如果您使用计划,这将很好地工作:
(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))
(filter (lambda (x) (not (equal? x 'NIL)))
lst)
正如我在我上面的评论中指出,我不确定您使用的是哪种Lisp方言,但是您的问题完全符合过滤器函数的模型(Python对其过滤器here有很好的文档)。从SICP拍摄的计划实施
(define (filter predicate sequence)
(cond ((null? sequence) nil)
((predicate (car sequence))
(cons (car sequence)
(filter predicate (cdr sequence))))
(else (filter predicate (cdr sequence)))))
假设,当然,你的Lisp解释不具有内置过滤功能,因为我怀疑它。然后,您可以通过调用
(filter number? l)
听起来你正在寻找一个过滤功能。您使用哪种Lisp方言(Scheme,Common Lisp等)? – 2012-02-20 03:45:12
Common Lisp。这是有道理的有一个内置的函数,忽略NILs .. – CyberShot 2012-02-20 03:48:49
@JohnPick钉它,检查他的答案! – 2012-02-20 03:57:13