2016-04-12 8 views
-2

私は挿入リスト機能を作っています。それは次のようになります:共通のlisp。 cond in defun

(defun INSERT1 (x y) 
(setq temp (list x y)) 
(setq k (sort temp #'< :key #'car))) 

(defun INSERT2 (x y) 
(setq temp (cons x y)) 
(setq k (sort temp #'< :key #'car))) 

と私はこれらの2つの機能を組み合わせる必要があります。 最初の挿入関数は、 'k'に何もないときに機能します。 2番目のインサートセル関数は、 'k'に要素があったときに機能します。

私は '指揮' を使用する必要があると思った、と私は '指揮' と思っ

(cond ((true/false)if true execute here and return) 
     ((true/false)if true execute here and return) 
     ...... 
     ((true/false)if true execute here and return)) 

ので、私は、この構成されています

(defun INSERT1 (x y) 
(setq temp (list x y)) 
(setq k (sort temp #'< :key #'car))) 

(defun INSERT2 (x y) 
(setq temp (cons x y)) 
(setq k (sort temp #'< :key #'car))) 

(defun INSERTCELL (x y) 
(setq temp nil) 
(cond 
((eq (car temp) nil) (INSERT1 (x y)) 
(t (INSERT2 (x y)))))) 

とエラー:

*** - EVAL: undefined function X 

をどのように私はエラーなしでこの問題で 'cond'を使用することができます...

私に正しいコードを教えてください。 Common Lispの(そして一般的には他のLisp)では

+0

'(INSERT1(xy))'は '(INSERT1 xy)'でなければなりません。そうでなければ 'x'は' y'に適用される関数として解釈されます。 – Renzo

+0

ああ..ありがとうレンゾ。それは今働く。 – Hoon

答えて

0

(foo ...)はいつもの1意味:

  • マクロFOO
  • は特別なオペレータFOO
  • で何かをする展開
  • 関数fooを呼び出します

非lispプログラミング言語に慣れているなら、普通はfoo(...)と書いてあるものは(foo ...)と書かれています。

関連する問題