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 这种差异是什么情况