4

コンパイルしようとしている関数がありますが、このコードでUndeclared free variableエラーが発生する理由を突き止めようと、過去 30 分間、頭を悩ませていました。Emacs を使用していますが、このエラーが発生する理由を解読できません。

(defun pretty-all(res diff)
  (let* ((v-list (blank-unit-list res))
         (c-list (blank-unit-list res)))
    (complete-fill c-list v-list res (total-res res) diff)
    (format t
            "Resistance is ~S~% Voltage is ~S~% Current is ~S~%"
            res v-list c-list)))

blank-unit-listcomplete-filltotal-resすべて私のカスタム定義関数です。

このエラーは、コードの構造に関連していると確信していますが、前に述べたように、何が原因かわかりません。


Emacs からコピー:

3 compiler notes:

CircuitFunctions.lisp:61:64:
  warning: Undeclared free variable RES

CircuitFunctions.lisp:61:70:
  warning: Undeclared free variable V-LIST

CircuitFunctions.lisp:61:81:
  warning: Undeclared free variable C-LIST

Compilation failed.
4

2 に答える 2

0

SLIME を使用している場合 (そして、lispbox を使用しているように見える場合)、コンパイラ ノートからソース内のどこにそれが発生したかを調べる方法があるはずです。正確なキーの組み合わせは覚えていません (スライムが入った emacs を目の前に置いた場合はおそらく押すことができますが、残念ながらそれが何であるかを意識的に覚えているわけではありません)。Slime-next-error がどのキーにバインドされているかを確認することはおそらく役に立ち、SLIME メニューに何かがあるかもしれません)。

コンパイラ ノートの行番号 (:61:64 などはソース行と列だと思います) を見ると、実際に発生したエラーは、貼り付けたコードと (まったく) 一致していません。v-list、のすべてがこの順序で含まれてresいることがわかる行はありません。c-listただし、これはマクロ展開が原因である可能性があります (ちなみにcomplete-fill、マクロであるか、その引数の 2 つを破壊的に変更しているように見えます)。

于 2012-06-09T06:46:09.907 に答える
0

私のコードには括弧がどこかに欠けている可能性があるというwvxvwの提案に従って、C-M-f. 問題なく通過し、今ではあきらめ始めていました。最後に、念のため、この質問からコードをコピーし、以前の関数をここのものに置き換えました。どういうわけかそれは今動作します。何が問題を引き起こしたのかはわかりませんが、現在は正しく機能しています。ご意見をお寄せいただきありがとうございます。

于 2012-06-12T14:23:03.500 に答える