Doseq بتقييم 1 × لكل ذ. هل هناك أي طريقة لجعله تقييم 1 × 1 لذ وهلم جرا في كلوجر؟

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

وأنا أفهم أن comprehensions القائمة، وdoseq كلا تقييم من هذا القبيل. هل هناك طريقة أخرى للقيام بذلك، لذلك أنه بدلا من 1 عنصر س تستخدم لكل عنصر من عناصر ذ، وهلم جرا، ويستخدم 1 عنصر X مع 1 عنصر y و هلم جرا، حتى أن الناتج سيكون بدلا من ذلك :


13
22
31

وعذرا إذا لم أكن صياغة هذا الحق، أنا فقط لا يمكن أن يبدو لوضعها في كلمات الحق.

وتحرير: أعتقد أنك تستطيع أن تفعل ذلك في هاسكل مع comprehensions قائمة وتمديد لغة. 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