如何将函数作为变量实现到Scheme中的更高函数中?

如何将函数作为变量实现到Scheme中的更高函数中?,scheme,racket,higher-order-functions,Scheme,Racket,Higher Order Functions,我想创建一个名为listfilter的高阶函数,它将接受以下输入 (listfilter greaterthan5 '(2 3 4 5 6 7 8)) 这将获取我的列表并通过我选择的函数运行它,在本例中,该函数检测数字是否大于5,如果大于5,则返回列表中所有大于5的数字: output: (6 7 8) 下面是一个简单的大于函数的示例 (define greaterthan5 (lambda (num) (if (> num 5)

我想创建一个名为
listfilter
的高阶函数,它将接受以下输入

(listfilter greaterthan5 '(2  3  4  5  6  7  8))
这将获取我的列表并通过我选择的函数运行它,在本例中,该函数检测数字是否大于5,如果大于5,则返回列表中所有大于5的数字:

output: (6 7 8)
下面是一个简单的大于函数的示例

(define greaterthan5 (lambda (num) (if (> num 5)
                                          #t
                                          #f)))
我不确定如何将函数作为高阶函数中的变量来实现,因此任何指导都会很好,谢谢。

使用和递归。该函数绑定到symbol
f
,并在列表的每个元素上递归调用。当此调用
(f(carlst))
返回
#true
时,该元素被添加到新列表中

(define (listfilter f lst)
  (cond ((empty? lst) '())
        ((f (car lst)) (cons (car lst)
                             (listfilter f (cdr lst))))
        (#true (listfilter f (cdr lst)))))
顺便说一下,您可以简化该谓词:

(define greaterthan5? (lambda (num) (> num 5)))