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

R5RSによると、内部定義は、let、let *、lambdaなどの一連のフォームの先頭でのみ発生する可能性があります。コードの場合、非内部定義の内部に内部定義があるため、そうではありません。手続き型の定義。`bootstrap-c-code'をプロシージャにバインドすることで修正できます。

于 2011-12-29T14:29:48.160 に答える
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 に答える