나는 다음으로 Clojure를하고 의아해을 배우고했습니다 의아해 : Clojure for for 루프 : while -> 예기치 않은 동작?
user=> (for [a (range 1 4) b (range 1 4)] [a b])
([1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]); _no surprise here_
내가 조건이 거짓이면 루프를 중단해야으로 빈리스트를 볼 것으로 예상,의는
:while (not= a b)
을 추가 할 수 있습니다. 이 경우 첫 번째 항목은
a
=
b
= 1입니다. 보자 :
user=> (for [a (range 1 4) b (range 1 4) :while (not= a b) ] [a b])
([2 1] [3 1] [3 2]) ; _surprise!_
는 :while
:when
에이 (= a b)
쌍
user=> (for [a (range 1 4) b (range 1 4) :when (not= a b) ] [a b])
([1 2] [1 3] [2 1] [2 3] [3 1] [3 2]); _expected_
아무도 설명 할 수 왜 이런 (for [ ... :while ..] ...)
동작합니다?
내가
OS X의
에 Clojure의 1.3을 사용하고 있습니다 감사합니다 및 서식의 부족을 끼쳐 드려 죄송합니다. 이것은 내 StackOverflow 처녀 게시물입니다.
감사합니다. Nikita. 따라서 : 내부 루프에만 적용되는 동안 외부 루프에도 적용하려면 어떻게해야합니까? 내가 가진 문제는 : ([: a : b : c : d : e : f]에서 [: a : b : c : d : e : f] : [path (find-path ab)] : while 경로) 경로); 경로가 nil 일 때 루프가 중지되어야합니다. – jbear
죄송합니다. 죄송합니다. [path [find a path from to] [~ : : a : b : c : d : e : ] : while path] path) – jbear
@jbear, 나도 몰라 :(당신이 경로의 게으른 seq을 생성하고 그들이 null이 아닌 동안 취하는 게 좋을지 모르겠다. 'for'가 게으르다는 것이 확실하지 않다. –