Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Racket 读取和扩展球拍源文件_Racket - Fatal编程技术网

Racket 读取和扩展球拍源文件

Racket 读取和扩展球拍源文件,racket,Racket,我需要读取球拍源文件并通过宏扩展运行它。我有一个简单的测试文件,Racket自己很乐意接受: C:\ayane>type factorial.rkt #lang racket (provide factorial) (define (factorial n) (if (<= n 1) 1 (* n (factorial (sub1 n))))) C:\ayane>类型factorial.rkt #朗格球拍 (提供阶乘) (定义(阶乘n) (如果)球拍 欢迎来到Racke

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

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

(define (factorial n)
 (if (<= n 1)
  1
  (* n (factorial (sub1 n)))))
C:\ayane>类型factorial.rkt
#朗格球拍
(提供阶乘)
(定义(阶乘n)
(如果)球拍
欢迎来到Racket v6.5。
>(读接受读卡器#t)
>(展开(使用文件“factorial.rkt”(lambda()(读取语法“factorial.rkt”))中的输入)
#
到目前为止,一切都很好。现在,测试程序中也有同样的内容:

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]
C:\ayane>type test.rkt
#朗格球拍
(读接受读卡器#t)
(展开(使用文件“factorial.rkt”中的输入)
(lambda()
(阅读语法“factorial.rkt”))
C:\ayane>球拍测试.rkt
rkt::1:模块:未绑定标识符;
此外,没有绑定#%app语法转换器
地址:模块

in:(模块阶乘racket(#%module begin(provide factorial)(定义(factorial n)(如果(您需要指定用于查找顶级变量(即程序中未绑定的变量)的名称空间
expand

例如:

 (parameterize ([current-namespace (make-base-namespace)])
     (expand ...))
有关更多信息,请参阅下面文件中的注释,我试图在其中解释名称空间和展开之间的关系:


来自@soegaard的答案解决了眼前的问题,但是如果您想要一个全面的程序来重新实现原语的扩展,您可以查看

 (parameterize ([current-namespace (make-base-namespace)])
     (expand ...))