Scheme/Racket中的双括号是什么?
What is double-parentheses in Scheme/Racket?
这是 Racket 中 for
循环的一个例子:
(define List '(1 2 3))
(for ((I List))
(displayln I)
)
在Scheme/Racket中,单括号对包裹一些东西是为了求值。但是上面的 for
循环形式将第一个参数作为 ((I List))
包裹在双括号对中。
好像是:
- 首先,评估
(I List)
- 然后,评估
I List
双括号中这种评估的实际理论意义是什么?
这是一系列绑定,而不是函数调用。
(let* ((x 1) (y 2) (z 3)) ; <-- sequence of bindings
(displayln (+ x y z)))
类似地:
(for ((x '(1 2 3)) (y '(3 2 1))) ; <-- like above
(displayln (+ x y)))
理论上,要么语言以不同方式解析它们,要么它们扩展为其他形式(宏)。
这是 Racket 中 for
循环的一个例子:
(define List '(1 2 3))
(for ((I List))
(displayln I)
)
在Scheme/Racket中,单括号对包裹一些东西是为了求值。但是上面的 for
循环形式将第一个参数作为 ((I List))
包裹在双括号对中。
好像是:
- 首先,评估
(I List)
- 然后,评估
I List
双括号中这种评估的实际理论意义是什么?
这是一系列绑定,而不是函数调用。
(let* ((x 1) (y 2) (z 3)) ; <-- sequence of bindings
(displayln (+ x y z)))
类似地:
(for ((x '(1 2 3)) (y '(3 2 1))) ; <-- like above
(displayln (+ x y)))
理论上,要么语言以不同方式解析它们,要么它们扩展为其他形式(宏)。