我想使用球拍lisp引擎,它允许执行一个过程,可以被一个计时器超时中断。我不知道如何构造一个引擎会接受的过程,因为我在网上找不到例子。在引擎文档中列出了具有以下合同的输入proc:
(engine proc) → engine?
proc : ((any/c . -> . void?) . -> . any/c)我只是学习类型化的球拍注解语义学,这在我的头脑中是暂时的。有人能帮助提供一些具体的例子,有效的程序,可以使用在球拍引擎?
发布于 2018-10-30 17:01:25
我玩过了。以下是我所做的:
#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)中打印出其余的内容,而不是在返回之前完成它。
https://stackoverflow.com/questions/53068325
复制相似问题