Scheme中定义表达式的类型

The*_*tus 6 scheme types racket

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

举个例子:

(define x 5)
Run Code Online (Sandbox Code Playgroud)

要么

(define x (lambda (n) (* n n)))
Run Code Online (Sandbox Code Playgroud)

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

Ósc*_*pez 11

在Racket中define是一个特殊的形式而不是表达式,所以它本身没有值,如果你尝试执行这样的事情,你会得到一个错误:

(display (define x 42))
=>  define: not allowed in an expression context in: (define x 42)
Run Code Online (Sandbox Code Playgroud)

如果它有一个值,它就是类似的东西void,但这将取决于解释器的特定实现细节(我相信我看到一个解释器#tdefine完成后返回)

#<void>大多数表单和过程都会返回常量,这些表单和过程具有副作用且没有用处

规范并没有深究这一点,无论是-加强它的实现相关的声明.

  • @TheEmeritus,你错了.通过阅读任何Scheme RnRS文档来学习. (4认同)
  • @TheEmeritus错误信息是明确的:在预期表达式的地方不能使用`define` (3认同)