(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"))
错误:定义:错误的语法(标识符后面的多个表达式)
但我看不出有什么不妥。有人可以解释/解决它。
答案 0 :(得分:1)
According to R5RS,内部定义只能出现在诸如let,let *,lambda等一堆形式的开头。对于你的代码,情况并非如此,因为你有一个内部非程序定义中的定义。您可以通过将`bootstrap-c-code'绑定到一个过程来修复它。
答案 1 :(得分:1)
目前尚不清楚您对上述代码的意图。如果您尝试加载文本文件并将加载的值保留在名为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"))