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

错误:定义:语法错误(标识符后有多个表达式)

但我看不出有什么问题。有人可以解释/修复它吗?

4

2 回答 2

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"))
于 2011-12-29T17:02:31.337 回答
1

根据 R5RS,内部定义只能出现在一系列形式的开头,如 let、let*、lambda 等。在您的代码的情况下,情况并非如此,因为您在非程序定义。你可以通过将 `bootstrap-c-code' 绑定到一个过程来修复它。

于 2011-12-29T14:29:48.160 回答