【问题标题】:How would I implement a funtion as a variable into a higher function in Scheme?我如何将函数作为变量实现到 Scheme 中的更高函数中?
【发布时间】:2021-02-27 20:05:51
【问题描述】:

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

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

然后它将获取我的列表并通过我选择的函数运行它,在这种情况下,一个检测数字是否大于 5 的函数,如果是,它将返回所有大于 5 的数字列表:

output: (6 7 8)

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

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

我不确定如何在高阶函数中将函数实现为变量,因此任何指导都会很棒,谢谢。

【问题讨论】:

    标签: scheme racket higher-order-functions


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2017-09-12
      • 2013-01-09
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多