List 删除NIL';从LISP列表中删除
简单的问题 假设我的列表中有一堆零。有没有一种简单的方法来删除零并保留数字?。eval在这里似乎不起作用List 删除NIL';从LISP列表中删除,list,lisp,null,List,Lisp,Null,简单的问题 假设我的列表中有一堆零。有没有一种简单的方法来删除零并保留数字?。eval在这里似乎不起作用 (NIL 1 NIL 2 NIL 3 NIL 4) 我需要(1 2 3 4)使用通用lisp语言,或者其他方言: (remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4)) 如果您使用的是Scheme,这将非常有效: (define lst '(NIL 1 NIL 2 NIL 3 NIL 4)) (filter (lambda (x) (not (equ
(NIL 1 NIL 2 NIL 3 NIL 4)
我需要
(1 2 3 4)
使用通用lisp语言,或者其他方言:
(remove-if #'null '(NIL 1 NIL 2 NIL 3 NIL 4))
如果您使用的是Scheme,这将非常有效:
(define lst '(NIL 1 NIL 2 NIL 3 NIL 4))
(filter (lambda (x) (not (equal? x 'NIL)))
lst)
正如我在上面的评论中所指出的,我不确定您使用的是哪种Lisp方言,但您的问题正好符合过滤器函数的模式(Python有很好的过滤器文档)。本文介绍了一个取自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解释器没有内置的过滤函数,我怀疑它有。然后,您可以通过拨打电话仅保留列表中的号码l
(filter number? l)
Common Lisp,而不是remove(如果可以使用remove):
(remove nil '(nil 1 nil 2 nil 3 nil 4))
听起来你在寻找一个过滤函数。您使用的是哪种Lisp方言(Scheme、Common Lisp等)?Common Lisp。有一个忽略NILs的内置函数是有道理的。@JohnPick搞定了,看看他的答案!如果这是家庭作业,那么将其标记为suchUser“Spec”有一个更直接的答案。