Учитывая эту печальную вещь ниже, которая генерирует все пары только двух диапазонов -
[53]> (setq thingie '())
NIL
[54]> (loop for i in (generate-range 0 3) do
(loop for j in (generate-range 4 6) do
(push (list i j) thingie)))
NIL
[55]> thingie
((3 6) (3 5) (3 4) (2 6) (2 5) (2 4) (1 6) (1 5) (1 4) (0 6) (0 5) (0 4))
[56]>
Или, другими словами, это генерирует вид двумерного дискретного макета.
Как бы я пошел для создания своего рода кода, генерирующего пары, который взял бы произвольное число диапазонов?(Или создание n-мерного дискретного макета).
Очевидно, что одним из решений было бы иметь defmacro
, который бы брал список списков и построил циклы n для выполнения, ноэто не кажется простым путем.