【发布时间】:2018-12-05 16:50:34
【问题描述】:
我正在学习球拍,我有一个关于何时使用define 以及何时使用let 的问题。
我有这个功能:
(define my-function
(lambda (param1 param2 list1)
(/
(count
(lambda (x)
(define a (param1 (remove x list1)))
(define b (drop-right x 1))
(define c (param2 a x-sin-clase))
(eq? (last x) (last c)))
(cdr list1))
(length (cdr list1)))))
不知道上面的函数是做什么的。在函数体内使用define是否正确?
我在某处读到define 用于声明全局变量,let 用于声明局部变量。我查看了球拍的文档,但没有说任何区别。
【问题讨论】:
-
一个区别:内部
defines在相互递归作用域(包括mut-rec函数),let绑定不是,但也有其他风格原因 -
@AlexKnauth 抱歉,我对您的评论一无所知。谢谢。
-
在
(let ([x expr-1] [y expr-2]) body)中,expr-1 和 expr-2 不能引用x或y。 . . . . . .但是,在(block (define x expr-1) (define y expr-2) body)中,expr-1 和 expr-2 都可以引用x和y。 -
技术上
defines 仅在顶层“允许”。在本地定义上下文中使用时,它们只是语法糖,将扩展为适当的let形式。