Scheme中定义表达式的类型

时间:2013-03-19 15:48:36

标签: types scheme racket

简单地说:我的问题是什么是Scheme中的定义表达式的类型?

以例如:

(define x 5)

(define x (lambda (n) (* n n)))

这对我来说有点混乱。有人可以帮忙吗?

1 个答案:

答案 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在这一点上也没有详细说明 - 加强了它依赖于实现的声明。