如何在Scheme中声明一个函数作为参数

时间:2012-09-29 23:47:01

标签: scheme

我想声明一个函数,它接受一个函数(该函数也将一个元素作为参数),一个列表作为Scheme中的参数

但是代码行给了我错误 (define(function funct(x),l)

2 个答案:

答案 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)))