Jam*_*son 14
您在Java中的示例并不直接映射到Scheme语言,只需学习一些新的关键字,因为没有用于在Scheme中实现for循环的显式构造(除非您自己编写构造!).在Scheme中执行此操作的cookbook方法是定义循环遍历列表的递归函数.这是一个如何在Scheme中执行for循环样式函数的示例:
(define (doit x x-max dx)
(if (<= x x-max)
(begin
;;...perform loop body with x...
(doit (+ x dx) x-max dx))))
(doit a b dx) ; execute loop from a to b in steps of dx
Run Code Online (Sandbox Code Playgroud)
摘自本页:
这是另一个指向页面的链接,该页面描述了将命令式语言循环转换为Scheme所需的理解:
Scheme是一门非常有趣的学习语言,你还应该阅读计算机程序的结构和解释,这是以前用于麻省理工学院教学计划的教科书.
Eli*_*lay 13
在PLT中你可以这样做:
(for ([i (in-range 10)])
(for ([j (in-range 3)]) (printf "~s\n" j))
(printf "~s\n" i))
Run Code Online (Sandbox Code Playgroud)
Scheme中的迭代结构为" do
",您可以在R5RS规范中查找.
你给出的例子看起来像这样:
(do ((i 0 (+ i 1))) ((> i 9))
(do ((j 0 (+ j 1))) ((> j 2))
(display j)
(newline))
(display i)
(newline))
Run Code Online (Sandbox Code Playgroud)
(do ...)
比这个例子中显示的更为通用.例如,您可以返回一个值,而不是仅仅使用它来产生副作用.也可以有许多"柜台":
(do ((i 0 (+ i 1)
(j 0 (+ j 2))
((stop? i j) <return-value>)
exprs...)
Run Code Online (Sandbox Code Playgroud)