上記のコードで何を意図したのかは明確ではありません。テキストファイルをロードして、ロードされた値をと呼ばれる変数bootstrap-c-code
に残そうとした場合は、次のことを試してください。
(define bootstrap-c-code
(let ((from-file
(lambda (file-name)
(let* ((ip (open-input-file file-name))
(res (read-text-file-from-input-port ip)))
(close-input-port ip)
res))))
(from-file "llvm.c")))
もちろん、from-file
定義は内部でのみ表示されます。外部let
で使用する必要がある場合define
は、式全体の外部で定義を使用できます。from-file
内部の機能のみが必要な場合let
は、はるかに簡単な方法で同じ結果を得ることができます。
(define bootstrap-c-code
(let* ((ip (open-input-file "llvm.c"))
(res (read-text-file-from-input-port ip)))
(close-input-port ip)
res))
一方、意図したのがと呼ばれるプロシージャbootstrap-c-code
を作成することであった場合、正しい構文は次のようになります。
(define (bootstrap-c-code)
(define (from-file file-name)
(let* ((ip (open-input-file file-name))
(res (read-text-file-from-input-port ip)))
(close-input-port ip)
res))
(from-file "llvm.c"))