球拍:里面的词汇范围

时间:2013-02-20 11:53:50

标签: racket list-comprehension lexical-scope

在Haskell中,在列表推导中,我可以在每次迭代时将表达式绑定到变量:

[a | x <- xs, let a = x ^ 2, a >= 25]

如何在Racket的for理解中绑定词法变量?

目前我有这段代码:

(define (euler4)
  (apply max
         (for*/list ([i (in-range 100 1000)]
                     [j (in-range i 1000)]
                     #:when (string=? (number->string (* i j))
                                      (string-reverse (number->string (* i j)))))
           (* i j))))

我想将(* i j)绑定到一个变量,并在函数的任何地方将表达式替换为它。

1 个答案:

答案 0 :(得分:9)

使用in-value表单创建一个绑定到单个值的循环变量。

在你的例子中:

(define (euler4)
  (apply max
         (for*/list ([i (in-range 100 1000)]
                     [j (in-range i 1000)]
                     [ij (in-value (* i j))]
                     #:when (string=? (number->string ij)
                                      (string-reverse (number->string ij))))
           (* i j))))