2011-12-29 25 views
2

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

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

回答

3

您正在寻找的read功能,而不是load?在不了解更多关于您使用的实现的情况下,我只能指向r5rs的read文档。使用open-input-file从文件名获取端口,然后从该端口读取。

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> 
) 
+0

文件名的内容只是C++代码我只需要获得作为字符串(但只有现在我明白了)并解决:) – Cynede 2011-12-30 05:15:49

相关问题