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)) 包裹在双括号对中。

好像是:

双括号中这种评估的实际理论意义是什么?

这是一系列绑定,而不是函数调用。

(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)))

理论上,要么语言以不同方式解析它们,要么它们扩展为其他形式(宏)。