我如何构建用于球拍lisp引擎的程序



我想使用rack-lisp引擎,它允许执行可以被计时器超时中断的过程。我不确定如何构建一个引擎可以接受的过程,因为我在网上找不到例子。在引擎文档中,它列出了具有以下合同的输入过程:

(engine proc) → engine?
proc : ((any/c . -> . void?) . -> . any/c)

我只是在学习打字球拍注释语义,这一点目前还没有解决。有人能帮助提供一些可以在球拍引擎中使用的有效程序的具体例子吗?

我已经玩了一点

#lang racket
(require racket/engine)
(define (test-engine allow-interrupt)
(let loop ((n 1))
(allow-interrupt #f)
(displayln (list 'step n))
(allow-interrupt #t)
(sleep 1)
(loop (add1 n))))
(define tee (engine test-engine))
(engine-run 2000 tee)

我注意到它可能会在displayln的中间中断,因此为了使displayln成为原子,我使用了所提供的过程,该过程会延迟原子操作期间的中断。如果没有它,它将在下一个(engine-run 2000 tee)中打印出其余部分,而不是在返回之前完成它。

最新更新