为什么在scheme中不允许嵌套定义

时间:2014-03-08 06:23:29

标签: lambda scheme racket

这是我的代码:

(define func1
  (define nest-func
    (lambda (x)
      (+ x x)))
  (lambda (y)
    (+ y (nest-func y))))

DrRacket说:

  

main.rkt:160:4:定义:错误的语法(标识符后面的多个表达式):(定义func1(定义nest-func(lambda(x)(+ xx)))(lambda(y)(+ y) (nest-func y))))     #(4186 125)

为什么会这样?

2 个答案:

答案 0 :(得分:2)

内部定义必须在lambda范围内。所以试试这个:

(define func1
  (lambda (y)
    (define nest-func
      (lambda (x)
        (+ x x)))
    (+ y (nest-func y))))

或者,您是否只想调用内部lambda一次?然后使用let

(define func1
  (let ((nest-func (lambda (x)
                     (+ x x))))
    (lambda (y)
      (+ y (nest-func y)))))

答案 1 :(得分:0)

还要注意缩写形式:

(define (func1 y)
  (define (nest-func x)
    (+ x x))
  (+ y (nest-func y)))