1

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

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

4

2 回答 2

1

在 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)

演示

于 2012-09-30T00:04:24.510 回答
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)))
于 2012-09-30T13:35:35.827 回答