Scheme(Racket) - 循环库

时间:2011-12-13 08:35:02

标签: scheme libraries racket

我有DrRacket版本5.0.2,我花了3个小时就已经在寻找合适的库来使whiledolistdotimes工作。我知道如何使用它们但我找不到合适的库。例如,当我输入dotimes时,它会告诉我未知的标识符。

PS:您是否必须使用define-syntax来定义这些循环?我试过了(require srfi/42),但它不起作用。我正在使用#lang scheme

3 个答案:

答案 0 :(得分:9)

您可以改用Racket的built-in iteration forms

您可以写(dolist (x some-list) body-forms ...)

而不是(for ((x some-list)) body-forms ...)

只要(dotimes (i n) body-forms ...)是非负整数,就可以使用(for ((i (in-range 0 n))) body-forms ...),甚至只使用(for ((i n)) body-forms ...),而不是n

您可以编写语法规则宏来将CL风格的循环转换为Racket风格的循环,但它可能不值得。 Racket for - 表单本身比dotimesdolist更灵活,因为您可以轻松地使用它们一次迭代多个序列。

答案 1 :(得分:0)

数字实际上是一个序列。

> (sequence->list 5)
'(0 1 2 3 4)

(for ((i (in-range n))) body-forms ...)也有效。 in-range更快。

答案 2 :(得分:0)

现在还有针对Racket的Common Lisp loop宏的实现。像这样导入:

(require (planet jphelps/loop))