如何提供文件内容作为方案扩展?

时间:2011-12-29 12:14:06

标签: scheme

我有

(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)

2 个答案:

答案 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>
  )