Bil*_*ill 5 scheme loops functional-programming common-lisp
我正在使用Scheme(R5RS)为类C语言编写一个小型解释程序,并尝试转换以下内容:
for (i = 0; i < 100; i++)
{
if (isprime(i)) continue;
else /* do something with i */
}
Run Code Online (Sandbox Code Playgroud)
有效的方案(isprime函数只是一个示例,并不重要)。
但是,经过一段时间的尝试,我仍然无法找到一种有效/简单的方法来向Scheme中的do循环中添加与continue语句等效的方法。更好的是“ for”宏,该宏允许使用“ continue”和“ break”。
我正在考虑切换到Common Lisp。这样的事情在CL中会更容易吗?
我们可以将FOR作为宏编写。通用Lisp版本:
(defmacro for ((var start end) &body body)
(let ((block-name (gensym "BLOCK")))
`(loop for ,var from ,start below ,end
do (block ,block-name
(flet ((continue ()
(return-from ,block-name)))
,@body)))))
CL-USER 2 > (for (i 10 20)
(if (evenp i) (continue))
(print i))
11
13
15
17
19
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4811 次 |
| 最近记录: |