cob*_*bie 4 scheme range nested-loops racket
有没有人知道在一个范围内的数字上嵌套循环的惯用方法是什么?在Racket/Scheme中?在Python中我们有:
for i in range(numb1):
for j in range(numb2):
Run Code Online (Sandbox Code Playgroud)
Racket/Scheme中的等价物是什么?
Ósc*_*pez 12
在Racket中,使用迭代和理解就这么简单:
(for* ([i (in-range numb1)]
[j (in-range numb2)])
<body of iteration>)
Run Code Online (Sandbox Code Playgroud)
以上内容仅适用于Racket.相比之下,以下代码段将适用于任何标准RxRS解释器 - 例如,使用一对嵌套do:
(do ((i 0 (+ i 1))) ((= i numb1))
(do ((j 0 (+ j 1))) ((= j numb2))
<body of iteration>))
Run Code Online (Sandbox Code Playgroud)
还有一个选择:使用显式递归并命名let:
(let loop1 ((i 0))
(cond ((< i numb1)
(let loop2 ((j 0))
(cond ((< j numb2)
<body of iteration>
(loop2 (+ j 1)))))
(loop1 (+ i 1)))))
Run Code Online (Sandbox Code Playgroud)
最后,您可以随时执行以下操作,有关详细信息,请参阅"嵌套映射"部分中的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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |