2つのソートされた関連リストをCommon Lispでマージしソートしたい。 コードを作った。しかし結果は私の考えと同じではありません。Common Lispで2つのソートリストをマージしソートしたい
(defun MERGEALIST (K L)
(cond ((and (eq nil K) (eq nil L)) nil)
((eq nil K) L)
((eq nil L) K)
((<= (car (car K)) (car (car L)))
(cons K (MERGEALIST (cdr K) L)))
((> (car (car K)) (car (car L)))
(cons L (MERGEALIST K (cdr L))))))
関数の入力K
とL
は連想リストをソートされます。 例えば、
K
は((1 . a) (3 . c) (5 . e))
L
が((2 . b) (4 . d))
あります。
結果は((1 . a) (2 . b) (3 . c) (4 . d) (5 . e))
と予想されます。
しかし、結果は全く異なります。 なぜこの結果が出ていますか?ありがとう。
最後の2つのケースの '(cons k ...)'と '(cons l ...)'を '(cons(car k)...)'と '(cons(car l) )...) '。 – jkiiski
私はあなたの以前の質問でこれに対する答えを得ていると確信しています:http://stackoverflow.com/q/36457071/1281433。ここで受け入れた答え(標準関数** merge **を使用する)は、[回答](http://stackoverflow.com/a/36459061/1281433)に記載されています(免責事項、それは私の答えです) 。 –
@ JoshuaTaylor:MERGEの回答は、さらに追加されます。私は特に最初の部分で彼のコードで彼の質問に答えました。彼の質問は、既存の関数がどのような問題を解決するのかということではなく、コードをどのように働かせるかということでした。 –