最小限の例に減らしてみました。コードはエラーなしで実行され、期待される出力が生成されます。しかし、最初の変数が未定義であるという警告が表示されます。progn の 2 番目のステートメントは、最初のステートメントの結果を「認識」していないようです。助けてくれてありがとう!
(私は元々、コードに progn コンストラクトをまったく持っていませんでしたが、このエラーが発生した後、それを追加して、それが順番に実行を強制するかどうかを確認しましたが、エラーは同じです。)
コードは次のとおりです。
(let ((input (open "input.lisp")))
(progn (defvar var1 (read input))
(defvar arr1 (make-array var1 :initial-contents (read input))))
(close input))
(print var1)
(print arr1)
これらはファイル「input.lisp」の内容です:
9
(10 8 6 4 2 4 6 8 10)
これは、実行後に sbcl から取得した出力です (load "test.lisp"):
; in: DEFVAR ARR1
; (MAKE-ARRAY VAR1 :INITIAL-CONTENTS (READ INPUT))
;
; caught WARNING:
; undefined variable: VAR1
;
; compilation unit finished
; Undefined variable:
; VAR1
; caught 1 WARNING condition
9
#(10 8 6 4 2 4 6 8 10)
T
したがって、両方の定義ステートメントが実行されているように見えますが、2 番目のステートメントは最初のステートメントの結果を「認識」していません。指定された初期コンテンツで満たされているため、配列は正しく構築されます。しかし、なぜ var1 がまだ定義されていないのでしょうか?