Scheme 方案:我不知道如何实现给定的功能

Scheme 方案:我不知道如何实现给定的功能,scheme,Scheme,这是“编程语言语用学,MichaelScott”的练习 返回一个包含给定列表中满足给定谓词的所有元素的列表。例如,(filter(lambda(x)(

这是“编程语言语用学,MichaelScott”的练习

返回一个包含给定列表中满足给定谓词的所有元素的列表。例如,(filter(lambda(x)( 我认为这个问题不仅需要满足上述每个谓词的函数。但我不知道如何实现这样的函数。请帮助。

这个过程已经存在于大多数Scheme实现中,它的行为与预期的一样:

(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7))
=> '(3 2 4)
该过程已存在于大多数方案实施中,其行为符合预期:

(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7))
=> '(3 2 4)

(define(filter pred?lst)/(cond/((null?lst))/(#t(apply/)/(cons/)我喜欢这样,但我不知道如何在第一个元素上应用pred?(很抱歉,在添加注释时我不知道如何换行)apply的同义词:call it。谓词it只是一个过程,就像其他任何过程一样-将列表的第一个元素作为参数传递给它,然后调用它(filter pred?(car lst))像这样?事实上,在第4行之后我不太清楚。第4行:
cons
调用列表第一个元素的谓词的结果,其结果是推进递归。这是构建输出列表的标准方法,我建议您看看“如何设计程序”或“小Schemer”,这是学习Scheme时需要了解的基本能力。呸!我很高兴听到这一点。我重复我的建议:你需要学习如何使用Scheme构造递归问题的解决方案,小Schemer和/或如何设计程序对此非常非常有用(define(filter pred?lst)/(cond/)((null?lst)()/(#t(apply//(cons//)我喜欢这样,但我不知道如何在第一个元素上应用pred?(抱歉,我不知道在添加注释时如何换行)apply的同义词:call it。谓词它只是一个过程,就像其他任何过程一样-然后通过列表的第一个元素作为参数调用它(filter pred?(car lst))是这样的吗?事实上,在第4行之后我不太清楚。第4行:
cons
调用列表第一个元素上的谓词的结果,其结果是推进递归。这是构建输出列表的标准方法,我建议您查看“如何设计程序”或“小Schemer”,这是学习Scheme时需要了解的基本能力。呸!我很高兴听到这一点。我重复我的建议:你需要学习如何使用Scheme构造递归问题的解决方案,小Schemer和/或如何设计程序将非常非常有用