For loop 什么是Scheme/Racket中的双括号?

For loop 什么是Scheme/Racket中的双括号?,for-loop,scheme,lisp,racket,evaluation,For Loop,Scheme,Lisp,Racket,Evaluation,这是球拍中环路的示例: (define List '(1 2 3)) (for ((I List)) (displayln I) ) 在Scheme/Racket中,环绕某事物的单括号对用于评估。但是上面的for循环形式将第一个参数作为((I List)),它被包装在双括号对中 这似乎是: 首先,评估(I列表) 然后,评估I列表 在双括号中,这种计算的实际理论意义是什么?这是一系列绑定,而不是函数调用 (let* ((x 1) (y 2) (z 3)) ; <-- sequen

这是球拍中环路的
示例:

(define List '(1 2 3))
(for ((I List))
  (displayln I)
)
在Scheme/Racket中,环绕某事物的单括号对用于评估。但是上面的
for
循环形式将第一个参数作为
((I List))
,它被包装在双括号对中

这似乎是:

  • 首先,评估
    (I列表)
  • 然后,评估
    I列表

在双括号中,这种计算的实际理论意义是什么?

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

(let* ((x 1) (y 2) (z 3))  ; <-- sequence of bindings
  (displayln (+ x y z)))

(让*((x1)(y2)(z3));知道这一点可能会有所帮助,虽然您经常会看到Scheme中的绑定列表是双括号,但Racket允许括号充当括号,一些(可以说是大多数)Racket用户更可能使用括号编写绑定。也就是说,编写
(for([x'(1 2 3)](displayln x))
代替了
(for((x'(1 2 3))(displayln x))
。同样的
cond
语法大小写
,等等。
[]
在一般编程中是一个列表,所以我现在更喜欢使用
for[(i list)]表单(
(for ((x '(1 2 3)) (y '(3 2 1))) ; <-- like above 
  (displayln (+ x y)))