2013-02-20 6 views
3

에 대한 내부 어휘 범위, 지능형리스트 안에, 내가 변수마다 반복으로 표현을 결합 할 수 있습니까? 변수에라켓 :</p> <pre><code>[a | x <- xs, let a = x^2, a >= 25] </code></pre> <p>어떻게 내가 라켓의 <code>for</code> 이해의 어휘 변수를 결합 않습니다 하스켈에서

(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) 및 기능에서 모든 곳으로 식을 대체 :

현재 나는이 코드가 있습니다.

+0

, 난 당신이 기본적으로 프로젝트 오일러 # 4에 대한 답변을 게시 내가 라켓에 그것을 해결하기 위해 노력하는 동안이 운 좋게 발견 한 것을 얻어 먹게 해요. 오일러는 당신이 이것을하지 말라고 특별히 요구합니다. 나는 프로젝트 - 오일러 태그를 추가했다 –

답변

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

니스! 그 사실을 몰랐습니다. –