首页 文章

读取和扩展Racket源文件

提问于
浏览
2

我需要读取一个Racket源文件并通过宏扩展来运行它 . 我有一个简单的测试文件,Racket自己乐意接受:

C:\ayane>type factorial.rkt
#lang racket
(provide factorial)

(define (factorial n)
 (if (<= n 1)
  1
  (* n (factorial (sub1 n)))))

现在我尝试使用REPL:

C:\ayane>racket
Welcome to Racket v6.5.
> (read-accept-reader #t)
> (expand (with-input-from-file "factorial.rkt" (lambda () (read-syntax "factorial.rkt"))))
#<syntax::1 (module factorial racket (#%m...>

到现在为止还挺好 . 现在,测试程序也是如此:

C:\ayane>type test.rkt
#lang racket
(read-accept-reader #t)
(expand (with-input-from-file "factorial.rkt"
                              (lambda ()
                               (read-syntax "factorial.rkt"))))

C:\ayane>racket test.rkt
factorial.rkt::1: module: unbound identifier;
 also, no #%app syntax transformer is bound
  at: module
  in: (module factorial racket (#%module-begin (provide factorial) (define (factorial n) (if (<= n 1) 1 (* n (factorial (sub1 n)))))))
  context...:
   C:\ayane\test.rkt: [running body]

所以看起来相同的代码交互式工作但不在程序中 . 我错过了什么?

2 回答

相关问题