0

私は、ボックスの寸法を読み取り、それらを最短から最長の長さに並べ替える (そして、これらの新しい長さのそれぞれを新しい変数として設定する) コードを含む Lisp プログラムに取り組んでいます。

ファイルをインタープリターにロードしようとすると、次のエラーが発生します。

*** - EVAL: undefined function NEW-D1

new-d1関数ではなく、特定のボックスの最短辺の長さの変数であるため、このエラーが発生する理由について混乱しています。

new-d1が最初に初期化および設定されるコードは次のとおりです。

(defun get-box ()
  (let ((d1 0) (d2 0) (d3 0) (new-d1 0) (new-d2 0) (new-d3 0))
    (setf d1 (read))
    (setf d2 (read))
    (setf d3 (read))
    (if (= d1 -1)
        (exit)
        (progn
         (setq new-d1 (first  (sort (list d1 d2 d3) #'<)))
         (setq new-d2 (second (sort (list d1 d2 d3) #'<)))
         (setq new-d3 (third  (sort (list d1 d2 d3) #'<)))
         (next-part-of-program (new-d1 new-d2 new-d3))))))

インタプリタが new-d1 が関数ではないことを認識し、関数として扱わないようにコードを変更するにはどうすればよいですか? 助けてくれてありがとう!

追加するために編集: プログラム コードの次の部分:

(defun next-part-of-program(d1 d2 d3)
    (if (> d2 b)
        (put-on-c-list(d1 c-list))
        (if (> d2 a) and (< d2 c)
            (put-on-b-list (d1 b-list))
            (put-on-a-list (d1 a-list)))))

注: 後で追加するグローバル変数/リストとして、a-list、b-list、および c-list を初期化しました。

再度、感謝します!

4

2 に答える 2

3

の最後の行は次のようにget-boxなります。

(next-part-of-program new-d1 new-d2 new-d3)))))

への引数を括弧で囲むべきではありませんnext-part-of-program

于 2013-11-24T04:02:03.310 に答える
1

少し短く書くことができます:

(defun get-box (&aux (d1 (read)) (d2 (read)) (d3 (read)))
  (if (= d1 -1)
      (exit)
    (apply #'next-part-of-program
           (sort (list d1 d2 d3) #'<))))
于 2013-11-24T13:30:28.417 に答える