以下のこの悲しいことを考えると、2つの範囲のみのすべてのペアを生成します-
[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]>
または、別の言い方をすれば、これは一種の 2 次元の個別のレイアウトを生成します。
任意の数の範囲を取るある種のペア生成コードを構築するにはどうすればよいでしょうか? (または、n 次元の個別のレイアウトを生成します)。
明らかに、1 つの解決策はdefmacro
、リストのリストを取り、実行のためにn 個のループを作成する a を使用することですが、それは簡単な方法ではありません。