我无法弄清楚如何将一些简单的代码抽象为循环/映射/for结构。我有以下代码有效,因为它给了我想要的输出:
(let
[recipe [1 1 2]
voicing [0 2 4]
counts (range (count voicing))
scale C]
(map vector
(make-scale recipe voicing scale 0)
(make-scale recipe voicing scale 1)
(make-scale recipe voicing scale 2)
)
输出是:
([:C :E :G] [:D :F :B] [:E :A :C] [:G :B :D] [:A :C :F] [:B :E :G] [:D :F :A])
我基本上使用“(map vector arg1 arg2 ...)”调用来交错3个seq。
显然,我需要做最后一步,删除重复的 make-scale 调用。问题是,我需要:
(map vector arg1 arg2 arg2)
以及我知道如何使用循环的所有方式都给了我在 seq 中循环的结果:
(map vector (arg1 arg2 arg3))
重构初始代码的最佳方法是什么,以便我只有一个函数调用来进行缩放?