【发布时间】:2016-05-21 22:56:26
【问题描述】:
我想让 Racket 评估 .kicad_mod 文件的语法,这些文件是以下形式的 s 表达式数据:
(module LED-10MM (layer F.Cu) (tedit 55BDE3C5)
(descr "LED 10mm")
...)
我希望能够混合使用 Racket 和“kicad_mod”语法,因此我正在尝试重新定义 module 函数。作为开始,我尝试过:
;kicad_mod.rkt
#lang racket
(provide
(except-out (all-from-out racket) #%module-begin module)
(rename-out [module-begin #%module-begin]))
(define kicad_module "you got me")
(define-syntax-rule (module-begin expr ...)
(#%module-begin
(provide (rename-out [kicad_module module]))))
以及最终在加载方面的工作方式(虽然不是在 drracket 中,而是直接使用球拍解释器):
;main.rkt
#lang racket
(module kicad_mod "kicad_mod.rkt")
(require 'kicad_mod)
(println module)
; => "you got me"
但如果我尝试任何其他方式,它都会失败:
1.
;main.rkt
#lang racket
(require "kicad_mod.rkt")`
导致错误:
main.rkt:3:9: module: bad syntax
in: module
context...:
standard-module-name-resolver
2.
;main.rkt
#lang s-exp "kicad_mod.rkt"
(println module)
导致标准输出没有输出
【问题讨论】: