使用λ在Racket中定义函数

时间:2016-09-15 16:57:32

标签: scheme racket

以下功能有效:

(define (testfn)
  (define (contains sl item)    (ormap (λ(x)(equal? item x)) sl))
  (if (contains (list 1 2 3) 2)    "yes" "no"))

(testfn)

输出:

"yes"

但是,使用λ符号的跟随不会:

(define (testfn2)
  (λ (contains sl item)    (ormap (λ(x)(equal? item x)) sl))
  (if (contains (list 1 2 3) 2)    "yes" "no"))

错误是:

contains: unbound identifier in module in: contains

可以使用λ符号来定义可以在多个地方调用的内部(或一般)函数吗?

1 个答案:

答案 0 :(得分:0)

是的,但您需要像使用任何其他标识符一样定义它。

(define (testfn2)
  (define contains (λ (sl item) (ormap (λ(x)(equal? item x)) sl)))
  (if (contains (list 1 2 3) 2)    "yes" "no"))

你的代码创建了一个函数但是(1)它没有绑定任何东西,(2)它实际上需要三个参数,第一个是“包含”。