4
有沒有人知道一個範圍內的數字嵌套循環的慣用方法是在球拍/方案?在Python中,我們有:在球拍/方案中的語言嵌套循環
for i in range(numb1):
for j in range(numb2):
什麼是球拍/計劃等價物?
有沒有人知道一個範圍內的數字嵌套循環的慣用方法是在球拍/方案?在Python中,我們有:在球拍/方案中的語言嵌套循環
for i in range(numb1):
for j in range(numb2):
什麼是球拍/計劃等價物?
球拍是這樣簡單,使用Iterations and 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))
作爲一個小P .S。 Óscar的優秀答案:在Racket中,最好是功能性的。所以你可能會發現自己使用'for'的變體來返回一個值,例如'for/list','/ vector'等。這些是建立在'for/fold'上的,這是最通用的「迭代和積累」形式。當然,當你爲了效果而需要做某些事情時(比如I/O),那麼你可能會使用普通的'for';加上它最容易理解,所以這是很棒的。 –