简单地说:我的问题是什么是Scheme中的定义表达式的类型?
以例如:
(define x 5)
或
(define x (lambda (n) (* n n)))
这对我来说有点混乱。有人可以帮忙吗?
答案 0 :(得分:11)
在Racket中define
是一种特殊形式,而不是表达式,所以它本身没有值,如果你尝试执行这样的事情,你会收到错误:
(display (define x 42))
=> define: not allowed in an expression context in: (define x 42)
如果它有一个值,它类似于void
,但这将取决于解释器的特定实现细节(我相信我看到一个解释器返回#t
之后a define
已完成)
大多数形式和程序都会返回常量
#<void>
,这些形式和程序会产生副作用并且没有用处
specification在这一点上也没有详细说明 - 加强了它依赖于实现的声明。