18 lines
484 B
Racket
18 lines
484 B
Racket
|
#lang racket/base
|
||
|
|
||
|
(provide run/timeout
|
||
|
define/timeout)
|
||
|
|
||
|
(require racket/engine)
|
||
|
|
||
|
;; (-> A) Real -> (U A Engine)
|
||
|
;; run the given thunk in an engine for 'fuel' milliseconds
|
||
|
;; if the engine completes, returns the result, otherwise the engine itself
|
||
|
(define (run/timeout tnk [fuel 1000])
|
||
|
(define e (engine (lambda (p) (tnk))))
|
||
|
(define r (engine-run fuel e))
|
||
|
(if r (engine-result e) e))
|
||
|
|
||
|
(define-syntax-rule (define/timeout x e)
|
||
|
(define x (run/timeout (lambda () e))))
|