doseq는 y마다 1 x를 평가합니다. Clojure에서 1 x 등 1 x를 평가할 수있는 방법이 있습니까?
-
06-07-2019 - |
문제
나는이 스레드의 이름을 표현하는 방법을 잘 모르겠으므로 명확히 할 수 있다면 그렇게하십시오.
내 예제 코드는 다음과 같습니다.
(doseq [x [1 2 3] y [3 2 1]] (println (str x y)))
해당 코드의 출력은 다음과 같습니다.
13
12
11
23
22
21
33
32
31
nil
나는 그 목록 이해력을 이해하고, doseq는 둘 다 이와 같이 평가합니다. 이 작업을 수행하는 또 다른 방법이 있으므로 Y의 모든 요소에 사용되는 X의 1 요소 대신 x의 1 요소가 y의 1 요소 등으로 사용되므로 출력이 대신 출력이 발생합니다. :
13
22
31
내가이 권리를 표현하지 않으면 죄송합니다. 그냥 말로 표현할 수없는 것 같습니다.
편집 : 목록 이해력과 언어 확장으로 Haskell 에서이 작업을 수행 할 수 있다고 생각합니다. 병리가있는 것 같은.
해결책
당신은 단순히 할 수 있습니다
(doseq [[x y] (map vector [1 2 3] [3 2 1])]
(println (str x y)))
다른 팁
(partition 2
(interleave [1 2 3] [3 2 1]))
interleave
주어진 서열로부터 일련의 교대 요소를 생성하고 partition
이 시퀀스를 일련의 시퀀스로 그룹화합니다 n
집단.
이것은 더 신속합니다.
(doall (map println [1 2 3] [3 2 1]))
제휴하지 않습니다 StackOverflow