ちょうどLISPを学び始めたところで、次の再帰関数を書く方法を理解しようとしています。同じ長さの2つのリストの内積を求める再帰的LISP関数を書く
は、だから私は、出力が、私は以下の
(defun DOT-PRODUCT (a b)
(if (or (null a) (null b))
0
(+ (* (first a) (first b))
(DOT-PRODUCT (rest a) (rest b)))))
書いた11
でなければなりません
(DOT-PRODUCT '(1 2) '(3 4)))
持っている必要があり、すべてが動作するようです。しかし、それはまだ異なる長さのリストで動作します。同じ長さの数字のリストを使って作業したいと思っています。私たちはそれを持っている必要があります "無効な長さ"を返すコードをどこに追加する必要がありますか?最初の引数がNIL
であれば、cond
の第一のブランチで
(defun dot-product (a b)
(cond ((null a) (if (null b) 0 (error "invalid length")))
((null b) (error "invalid length"))
(t (+ (* (first a) (first b))
(dot-product (rest a) (rest b))))))
、第1必要があります。それは条件付きの形cond
を使用して異なるケースをチェックするように
ifの代わりにcondを使用するための詳細な説明と提案をありがとう。それは本当に役立ちます! – trungnt