gpt4 book ai didi

scheme - 在 Racket 中使用循环中断

转载 作者:行者123 更新时间:2023-12-05 00:49:40 25 4
gpt4 key购买 nike

我可以使用来自 While Loop Macro in DrRacket 的代码在 Racket 中使用“while”循环

(define-syntax-rule (while-loop condition body ...)   
(let loop ()
(when condition
body ...
(loop))))

但是,我想在无限循环中使用 break,如下所示:

(define (testfn)
(define x 5)
(while-loop #t ; infinite while loop;
(println x)
(set! x (sub1 x))
(when (< x 0)
(break)))) ; HOW TO BREAK HERE;

如何在上面的无限循环中插入中断?感谢您的评论/回答。

最佳答案

你没有。 Racket 属于 Scheme 系列,因此所有循环实际上都是通过递归完成的。

您通过不递归来跳出循环。任何其他值都将成为表单的结果。

(define (helper x) 
(displayln x)
(if (< x 0)
'return-value
(helper (sub1 x)))
(helper 5)

有一些宏可以使语法更简单。使用命名 let 是一个:

(let helper ((x 5))
(displayln x)
(if (< x 0)
'return-value
(helper (sub1 x)))

查看您的 while-loop 只是一个使用名为 let 宏的宏,该宏变成了递归过程。

如果你代替 #t 编写一个最终变为 false 的表达式,它将停止。喜欢:

(while-loop (<= 0 x)
...)

请注意,使用 set! 在循环中更新变量并不被认为是好的做法。如果您正在学习 Racket,请尽量不要使用 set! 或新的循环结构。尝试使用命名的 letletrec

关于scheme - 在 Racket 中使用循环中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com