次の形式を取る、Scheme で可変長関数を定義する必要があります。(define (n-loop procedure [a list of pairs (x,y)])
ここで、ペアのリストは任意の長さにすることができます。
各ペアは、下限 (含む) と上限 (含まない) を指定します。つまり、次の関数呼び出し: は以下(n-loop (lambda (x y) (inspect (list x y))) (0 2) (0 3))
を生成します。
(list x y) is (0 0)
(list x y) is (0 1)
(list x y) is (0 2)
(list x y) is (1 0)
(list x y) is (1 1)
(list x y) is (1 2)
さて、私は以前このトピックに投稿したことがあり、素晴らしく助けられました. しかし、私は従うべき新しいガイドラインを与えられました。ソリューションは、ネストされたマップのみを使用して見つけることができます。
これについて私が行ってきた方法は次のとおりです。最初の境界セットによって指定されたすべての値を見つけます (例では、(0 1 2)
)。これは、 と呼ばれる関数によって実行できます(enumerate lowBound highBound)
。次に、これらの数値をそれぞれ取得し、次の範囲のセットで各数値をコンスする必要があります。(0 1 2 3)
結果は になり((0 0) (0 1) (0 2) (0 3) (1 0)...)
ます。
ここまで書いた内容は以下の通りです。
(define (n-loop op . pairs)
(apply op (generate pairs))
)
(define (generate pairs)
(map (lambda (x) (cons x (generate (cdr pairs))))
(map (lambda (x) (enumerate (car x) (cadr x))) pairs))
)
しかし、指定された数値については、(0 1 0 1 2 0 1 2 0 1 2)
必要なときに出力されます((0 0) (0 1) (0 2) (0 3) (1 0)...)
。これは厄介な問題です。誰にも洞察力がありますか?