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