我想声明一个函数,它接受一个函数(该函数也将一个元素作为参数),一个列表作为Scheme中的参数
但是代码行给了我错误 (define(function funct(x),l)
答案 0 :(得分:1)
在Scheme中,函数为first-class citizens。因此,您可以将函数作为参数传递给另一个函数,就像使用任何其他符号一样。没有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)
。
<强> DEMO 强>
答案 1 :(得分:0)
Scheme不允许您在函数定义中指定参数类型。你能做的最好的就是
(define my-func(func . args)
这将为您提供 func 参数中的第一个参数以及 args 中列表中的所有其余参数。然后,在将其应用于args之前,可以检查** func **的类型(如果需要)。
(cond
((procedure? func) (func args))
(else (report some kind of error however you want)))