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



这是我的代码:

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

drracket说:

main.rkt:160:4:定义:不良语法(标识后的多个表达式)in :(定义func1(define func1(define nest-func(lambda(x)( x x)))(lambda(y)( y)( y)(Nest-func y)))))) #(4186 125)

为什么这是?

内部定义必须在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)))))

还请注意速记表格:

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

最新更新