Doseq оценивает 1 x для каждого y. Есть ли способ заставить его оценить 1 x в течение 1 года и так далее в Clojure?

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

Я понимаю, что список пониманий, и доза, оба оценивают так. Есть ли другой способ сделать это, чтобы вместо 1 элемента x использовался для каждого элемента y и т. Д., 1 элемент x использовался с 1 элементом y и т. Д., Так что вместо этого вывод был бы


13
22
31

Извините, если я не правильно сформулировал это, я просто не могу выразить это словами.

РЕДАКТИРОВАТЬ: Я думаю, что вы можете сделать это в Haskell с помощью списков и расширения языка. ParallelListComps или что-то.

Это было полезно?

Решение

Вы можете просто сделать

(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