Racket: лексический объем внутри для

В 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) к переменной и заменить выражение на нее везде в функции.


person Mirzhan Irkegulov    schedule 20.02.2013    source источник
comment
Хотя вопрос и ответ верны, я расстроен тем, что вы в основном опубликовали ответ на Project Euler # 4, и я наткнулся на это, пытаясь решить его в Racket. Эйлер специально просит вас не делать этого. Я добавил тег проекта-эйлера   -  person Darren Newton    schedule 17.08.2014


Ответы (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))))
person Eli Barzilay    schedule 20.02.2013
comment
Хороший! не знал о таком. - person John Clements; 20.02.2013