Doseq بتقييم 1 × لكل ذ. هل هناك أي طريقة لجعله تقييم 1 × 1 لذ وهلم جرا في كلوجر؟
-
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]))