Scheme 读取文件:语法错误(标识符后有多个表达式)

Scheme 读取文件:语法错误(标识符后有多个表达式),scheme,racket,r5rs,Scheme,Racket,R5rs,错误:定义:错误语法(标识符后有多个表达式) 但我看不出有什么问题。有人可以解释/修复它吗。,内部定义只能出现在诸如let、let*、lambda等一系列表单的开头。对于代码,情况并非如此,因为在非过程定义中有内部定义。您可以通过将“bootstrap-c-code”绑定到一个过程来修复它。不清楚上述代码的用途。如果您试图加载文本文件并将加载的值保留在名为bootstrap-c-code的变量中,请尝试以下操作: (define bootstrap-c-code (define (fro

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


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

,内部定义只能出现在诸如let、let*、lambda等一系列表单的开头。对于代码,情况并非如此,因为在非过程定义中有内部定义。您可以通过将“bootstrap-c-code”绑定到一个过程来修复它。

不清楚上述代码的用途。如果您试图加载文本文件并将加载的值保留在名为
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"))
当然,来自文件的
定义仅在
let
中可见,如果需要在整个表达式之外使用它,
定义它。如果您只需要
let
中的
from file
功能,您可以通过更简单的方式获得相同的结果:

(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")))
另一方面,如果您打算创建一个名为
bootstrap-c-code
过程,那么正确的语法应该是:

(define bootstrap-c-code
  (let* ((ip  (open-input-file "llvm.c"))
         (res (read-text-file-from-input-port ip)))
    (close-input-port ip)
    res))

好!!然后考虑将LLVM C作为参数传递给函数,而不是硬编码这个值,但是等待…它不起作用:(引用未定义的标识符:从输入端口读取文本文件
从输入端口读取文本文件
在您问题的代码中,我只是假设您已经实现了它!-此外,这不是问题,问题是如何处理错误“标识符后的多个表达式”,这在我的回答中得到了解决(添加了所有内容)现在它工作了,很抱歉搞砸了。
(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"))