我有
(define (compiler exp)
(define (printer line) (display line) (newline))
(init-generators)
(let ((res (compile (append bootstrap (list exp)) function-res '())))
(map printer c-string-list)
(display bootstrap-c-code)
(add-c-function 'startup '(env) res)
(map (lambda (function) (map printer function) (newline)) c-function-list)
'ok))
我需要
(define (compile file-name)
(compiler (load file-name)))
但它不会这样。它正在直接执行。如何将其作为表达式加载? (EXP)
答案 0 :(得分:2)
您是否正在寻找read
功能,而不是load
?在不了解您正在使用的实现的更多信息的情况下,我只能指向r5rs的read文档。使用open-input-file
从文件名中获取端口,然后从该端口读取。
答案 1 :(得分:1)
文件file-name
的内容是什么?如果它是表达式,load
将执行它,例如,如果file-name
包含(+ 1 1)
,则(load filename)
将返回2.
另一方面,如果file-name
包含符号列表,它们将按原样读取,例如file-name
包含'(+ 1 1)
(注意开头的引用) ,然后(load filename)
将返回(+ 1 1)
,我猜你的意思是说你需要将它作为表达式加载。
如果您需要在文件中加载多个表达式,请在文件中用引号和开头包围它们:
'(begin
<your code here>
)