Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 删除NIL';从LISP列表中删除_List_Lisp_Null - Fatal编程技术网

List 删除NIL';从LISP列表中删除

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

简单的问题

假设我的列表中有一堆零。有没有一种简单的方法来删除零并保留数字?。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 (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”有一个更直接的答案。