【问题标题】:Racket: lexical scope inside forRacket:for 内部的词法范围
【发布时间】:2013-02-20 11:53:49
【问题描述】:

在 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) 绑定到一个变量,并在函数中的任何位置替换表达式。

【问题讨论】:

  • 虽然问题和答案是有效的,但我很遗憾您基本上发布了对 Project Euler #4 的答案,而我在尝试在 Racket 中解决它时偶然发现了这个问题。欧拉特别要求您不要这样做。我添加了 project-euler 标签

标签: racket list-comprehension lexical-scope


【解决方案1】:

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

【讨论】:

  • 不错!不知道那个。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2016-06-23
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多