我如何将函数作为变量实现到 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)))
我想创建一个名为 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)))