Scheme 直接在线加载和使用加载程序之间,lwp程序的操作有什么不同?
我使用Scheme 直接在线加载和使用加载程序之间,lwp程序的操作有什么不同?,scheme,continuations,guile,callcc,Scheme,Continuations,Guile,Callcc,我使用guile 2.0.13作为我的方案解释器,我编写了文件3.3.3.scm,如下所示: (define lwp-list '()) (define quit-k #f) (define lwp (lambda (thunk) (set! lwp-list (append lwp-list (list thunk))))) (define start (lambda () (if (not quit-k) (set! quit-k (call/c
guile 2.0.13
作为我的方案解释器,我编写了文件3.3.3.scm
,如下所示:
(define lwp-list '())
(define quit-k #f)
(define lwp
(lambda (thunk)
(set! lwp-list (append lwp-list (list thunk)))))
(define start
(lambda ()
(if (not quit-k)
(set! quit-k (call/cc (lambda (k) k))))
(if (not (null? lwp-list))
(let ([p (car lwp-list)])
(set! lwp-list (cdr lwp-list))
(p)))))
(define pause
(lambda ()
(call/cc
(lambda (k)
(lwp (lambda () (k #f)))
(start)))))
(define quit
(lambda ()
(set! lwp-list '())
(quit-k #f)))
(lwp (lambda () (let f () (pause) (display "h") (f))))
(lwp (lambda () (let f () (pause) (display "e") (f))))
(lwp (lambda () (let f () (pause) (display "y") (f))))
(lwp (lambda () (let f () (pause) (display "!") (f))))
(lwp (lambda () (let f () (pause) (newline) (f))))
(lwp (lambda () (let f () (pause) (quit))))
(start)
如果我在交互界面中使用(加载“3.3.3.scm”)
,似乎3.3.3.scm
运行正常。但是,当我直接运行guile 3.3.3.scm
时,在guile
第一次调用后,将调用过程quit
:
hey!
Backtrace:
In ice-9/boot-9.scm:
160: 3 [catch #t #<catch-closure 17db460> ...]
In unknown file:
?: 2 [apply-smob/1 #<catch-closure 17db460>]
In ice-9/boot-9.scm:
66: 1 [call-with-prompt prompt0 ...]
In unknown file:
?: 0 [#f #f]
ERROR: In procedure #f:
ERROR: Wrong type to apply: #f
嘿!
回溯:
在ice-9/boot-9.scm中:
160:3[接球]
在未知文件中:
?:2[应用smob/1#]
在ice-9/boot-9.scm中:
66:1[在提示提示下呼叫0…]
在未知文件中:
?:0[#f#f]
错误:在程序#f中:
错误:要应用的类型错误:#f
这种差异是什么情况