我想声明一个函数,该函数接受一个函数(该函数也接受一个元素作为参数)和一个列表作为 Scheme 中的参数
但是这行代码给了我错误(define (function funct(x),l)
我想声明一个函数,该函数接受一个函数(该函数也接受一个元素作为参数)和一个列表作为 Scheme 中的参数
但是这行代码给了我错误(define (function funct(x),l)
在 Scheme 中,函数是一等公民。因此,您可以将一个函数作为参数传递给另一个函数,就像您对任何其他符号所做的那样。没有function
关键字这样的东西。
例如,要定义一个map
将函数作为参数调用的函数,并将其应用于列表的每个成员,您可以使用:
(define (map f l)
(if (null? l)
l
(cons (f (car l)) (map f (cdr l)))))
然后,如果您有一个add1
要传递给的名为的函数map
:
(define (add1 x)
(+ x 1))
(map add1 '(1 2 3))
结果将是(2 3 4)
。
演示。
Scheme 不允许您在函数定义中指定参数类型。你能做的最好的就是
(define my-func(func . args)
这将为您提供func参数中的第一个参数,以及args列表中的所有其余参数。然后,如果需要,您可以在将其应用于 args 之前检查 ** func ** 的类型。
(cond
((procedure? func) (func args))
(else (report some kind of error however you want)))