doseq는 y마다 1 x를 평가합니다. Clojure에서 1 x 등 1 x를 평가할 수있는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1216668

  •  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]))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top