如何从球拍中的列表中过滤掉错误值

rad*_*ous 6 lisp scheme racket

我正在学习Racket(但可能在任何Scheme和scheme派生语言中的答案都类似)并且想知道如何从给定列表中过滤出错误(#f)值.我想出的最好的是:

(filter (lambda (x)
           (not (eq? x #false)))
        '("a" "b" #f 1 #f "c" 3 #f))

'("a" "b" 1 "c" 3) ;; output
Run Code Online (Sandbox Code Playgroud)

但是,我想必须有一个更简单的解决方案.

vuk*_*ung 9

你可以这样做

(filter identity '("a" "b" #f 1 #f "c" 3 #f))
Run Code Online (Sandbox Code Playgroud)

因为没有#f被认为是真的.

  • 此外,你可能会看到使用`values`而不是`identity`的Racket代码(例如当有人使用`#lang racket/base`并且不想'(需要球拍/功能)`只是为了获得`身份`). (9认同)