2011-12-29 5 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

お探しですか?使用している実装の詳細がわからないと、私はr5rsのreadのドキュメントを指すことができます。ファイル名からポートを取得し、そのポートから読み取るには、open-input-fileを使用します。

1

file-nameの内容は何ですか?それは式の場合は、loadfile-name(+ 1 1)が含まれている場合、(load filename)は一方2.

を返します。例えば、それを実行しますfile-nameはシンボルのリストが含まれている場合、彼らがそうであるように、彼らは、たとえば、読み込まれますfile-nameには'(+ 1 1)が含まれています(冒頭の引用符に注意してください)。(load filename)(+ 1 1)を返します。これは、式としてロードする必要があると言います。

あなたは、ファイル内のいくつかの表現をロードする必要が引用符でそれらを囲むと、ファイルに始める場合:あなたはloadとは反対に、read機能のために

'(begin 
    <your code here> 
) 
+0

ファイル名の内容はちょうどC++のコードです。文字列として取得する必要がありますが(今は理解しています)、解決しました:) – Cynede

関連する問題