範囲内の数値でネストされたループの慣用的な方法が Racket/Scheme にあることを知っている人はいますか? Python には次のものがあります。
for i in range(numb1):
for j in range(numb2):
ラケット/スキームで同等のものは何ですか?
範囲内の数値でネストされたループの慣用的な方法が Racket/Scheme にあることを知っている人はいますか? Python には次のものがあります。
for i in range(numb1):
for j in range(numb2):
ラケット/スキームで同等のものは何ですか?
Racket では、Iterations と Comprehensionsを使用して、次のように単純です。
(for* ([i (in-range numb1)]
[j (in-range numb2)])
<body of iteration>)
上記はラケットでのみ機能します。比較すると、次のスニペットは、たとえば、ネストされた のペアを使用して、標準の RxRS インタープリターで機能しますdo
。
(do ((i 0 (+ i 1))) ((= i numb1))
(do ((j 0 (+ j 1))) ((= j numb2))
<body of iteration>))
さらに別のオプション: 明示的な再帰と名前付きを使用するlet
:
(let loop1 ((i 0))
(cond ((< i numb1)
(let loop2 ((j 0))
(cond ((< j numb2)
<body of iteration>
(loop2 (+ j 1)))))
(loop1 (+ i 1)))))
最後に、いつでも次のようなことを行うことができます。詳細については、「ネストされたマッピング」セクションのSICPを参照してください。
(define (range start stop)
(let loop ((i (- stop 1))
(acc '()))
(if (< i start)
acc
(loop (- i 1) (cons i acc)))))
(for-each
(lambda (i)
(for-each
(lambda (j)
<body of iteration>)
(range 0 numb2)))
(range 0 numb1))