lispでペアを機能させようとしています。ペア関数は2つの入力を取得し、ペアを作り、1つのリストを作成します。ここに私のコードです。lispで入れ子になったループを使ってペアを作る方法
(defun npair (s1 s2)
(let ((result '()))
(cond ((null s1) s2)
((null s2) s1)
(t (loop
(when (null s1) (return result))
(while (not (null s2))
(setq result (cons (list (car s1) (car s2)) result))
(setq s2 (cdr s2)))
(setq s1 (cdr s1)))))))
この関数は、(npair '(a b c) '(1 2))
のように戻ってきたはずです - >((a 1) (a 2) (b 1) (b 2) (c 1) (c 2))
しかし、私の結果は唯一((a 1) (a 2))
です。 助けてください!
WHILEが不明なため、コードを実行できません。 –
あなたのヌルケースの条件は、これが正しいデカルト積ではないことを意味します。いずれかのリストが空の場合、結果は空でなければなりません。空でないリストのすべての要素と空のリストのすべての要素の組み合わせが空であるためです。もちろん、私たちは好きな関数を定義することができます。特別な事例*を無償で出力すると、有用な価値を持つことはまずありません。 – Kaz