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

How would I implement a funtion as a variable into a higher function in Scheme?

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

(listfilter greaterthan5 '(2  3  4  5  6  7  8))

然后将通过我选择的函数获取我的列表并 运行 它,在本例中,该函数检测数字是否大于 5,如果大于 5,它将 return 列表中所有大于 5 的数字:

output: (6 7 8)

这是一个简单的大于函数的例子

(define greaterthan5 (lambda (num) (if (> num 5)
                                          #t
                                          #f)))

我不确定如何在高阶函数中将函数实现为变量,所以任何指导都很好,谢谢。

使用cond和递归。该函数绑定到符号 f 并在列表的每个元素上递归调用。当此调用 (f (car lst)) returns #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)))