Filter 使用过滤功能过滤#t符号

Filter 使用过滤功能过滤#t符号,filter,scheme,Filter,Scheme,我想使用filter函数过滤掉所有真实表达式: (filter '#t '(#t #t #f #f #t)) 这就是我得到的错误: 筛选:违反合同 预期:(any/c.->.any/c) 给定:#tfilter用于在每个元素上运行函数,并保留返回真值的元素。如果只想删除特定值,请使用remove(或remq或remv,具体取决于要使用的等价谓词): 第一个参数过滤器应该是一个函数,而不是要删除的元素。如果@ Barmar的答案对你有用,请考虑。JoshuaTaylor If Barmar的答案

我想使用filter函数过滤掉所有真实表达式:

(filter '#t '(#t #t #f #f #t))
这就是我得到的错误:

筛选:违反合同 预期:(any/c.->.any/c)
给定:#t

filter
用于在每个元素上运行函数,并保留返回真值的元素。如果只想删除特定值,请使用
remove
(或
remq
remv
,具体取决于要使用的等价谓词):


第一个参数<代码>过滤器应该是一个函数,而不是要删除的元素。如果@ Barmar的答案对你有用,请考虑。JoshuaTaylor If Barmar的答案对你有用,请考虑它的投票(因为目前我是唯一的Upvter)。ChrisJester Young我可能会,但我希望看到更多关于这里使用的实际编程语言(和版本)的澄清。正如对该答案的评论所指出的,Racket和Scheme的不同版本在是否定义了
remove
filter
以及(如果定义了)它们以什么作为参数方面有所不同。@JY2k您使用的是什么特定语言?您使用的是某个版本的Racket,还是各种RNRS方案之一?这对于确定哪些定义对您可用非常重要。这仅删除第一次出现的定义。使用(删除*'(#t)(#t#t#f#f#t))来代替。@uselpa我在有趣的。。。我查看了Racket文档,这个过程似乎与R6RS不同。@uselpa Racket就是这样做的。SRFI-1实际上是一个过滤器(它接受一个谓词并删除所有匹配项)。
(remove #t '(#t #t #f #f #t))