求助:能否在Guile中编写循环过程?本人代码存在语法错误
Guile循环过程的语法错误修正
你写的代码有几个明显的语法和逻辑问题,导致编译器报错:
(when predicate)后面多了个右括号,直接破坏了when的语法结构。Guile中when的正确写法是(when 测试条件 条件成立时执行的代码...),所有要在条件为真时运行的代码必须放在when的同一对括号内。- 单独写
callback只是引用了这个过程变量,不会实际执行回调逻辑,必须写成(callback)才会调用这个过程。 - 递归调用
(loop predicate callback)必须放在when的代码块里,否则不管条件是否满足都会无限递归,即便语法没问题也会直接栈溢出。
修正后的可运行代码:
(define loop (lambda (predicate callback) (when predicate (callback) (loop predicate callback))))
使用示例(循环5次并输出计数):
(define count 0) (loop (lambda () (< count 5)) (lambda () (display count) (newline) (set! count (+ count 1))))
注意:这里传入的predicate必须是无参过程,每次循环时会调用它判断是否继续执行。
内容的提问来源于stack exchange,提问作者Amanda Ferrari
相关产品推荐
相关产品推荐

