Filter 方案中的映射过滤器CPS版本

Filter 方案中的映射过滤器CPS版本,filter,scheme,map-function,continuation-passing,Filter,Scheme,Map Function,Continuation Passing,我想知道,方案中CPS版本中是否有map过滤器的实现 例如: (map-filter square even? '(1 2 3 4)) -> '(4 16) 您可以使用filter&和map&定义map过滤器&: (define (map-filter& proc& pred?& lst k) (filter& pred?& lst (lambda (new-lst) (

我想知道,方案中CPS版本中是否有map过滤器的实现

例如:

(map-filter square even? '(1 2 3 4)) -> '(4 16)  

您可以使用
filter&
map&
定义
map过滤器&

(define (map-filter& proc& pred?& lst k)
  (filter& pred?&
           lst
           (lambda (new-lst)
             (map& proc& new-lst k))))

您可以使用
filter&
map&
定义
map过滤器&

(define (map-filter& proc& pred?& lst k)
  (filter& pred?&
           lst
           (lambda (new-lst)
             (map& proc& new-lst k))))

[这个答案给出了此人描述的功能的两个版本:不是CPS版本。我认为这个问题模棱两可,但这可能不是正确的答案:Sylvester的答案是。]

如果您想要的是您所描述的内容(我很确定这不是CPS),那么类似这样的内容是有效的:

(define (map-filter mapper filterer lst)
  (map mapper (filter filterer lst)))
在球拍中,这样可能更好:

(define (map-filter mapper filterer lst)
  (for/list ([e (in-list lst)]
             #:when (filterer e))
    (mapper e)))

这也许有更好的机会避免考虑中间列表,但对我来说气味更难闻。

[这个答案给出了该人描述的函数的两个版本:不是CPS版本。我认为这个问题是含糊不清的,但这可能不是正确的答案:Sylvester的是。]

如果您想要的是您所描述的内容(我很确定这不是CPS),那么类似这样的内容是有效的:

(define (map-filter mapper filterer lst)
  (map mapper (filter filterer lst)))
在球拍中,这样可能更好:

(define (map-filter mapper filterer lst)
  (for/list ([e (in-list lst)]
             #:when (filterer e))
    (mapper e)))

这也许有更好的机会避免考虑中间列表,但对我来说气味更难闻。

这个问题非常不清楚,也不清楚您的示例与CPS的关系。你能澄清一下你的意思吗?这个问题很不清楚,也不清楚你的例子与CPS有什么关系。你能澄清一下你的意思吗?这些都不是@Sylvester:我同意(或者不是在我熟悉的任何CPS中)。我原以为这个人想要的是一个带有他们签名的函数,但我认为我现在错了:他们知道如何编写该函数,但想要对其进行CPS转换。这些都不是@Sylvester:我同意(或者不是在我熟悉的任何CPS中)。我本来以为这个人是在寻找一个带有签名的函数,但我现在想我错了:他们知道如何编写这个函数,但想要对它进行CPS转换。