Shammer's Philosophy

My private adversaria

Lispで挿入ソート・その2

Lispで挿入ソート・その1 - Shammerismで作成した ins-list を少し改良。比較が常に < になっていたが、これを任意のものに変更できるようにした。改良版は以下。

? (defun insert-element (test element l)
  (if (null l)
      (cons element nil)
    (let ((first-element (car l)))
      (if (funcall test element first-element)
	  (append (cons element nil) l)
	(append (cons first-element nil) (insert-element test element (cdr l)))))))
INSERT-ELEMENT
? (insert-element #'< 13 '(0 10 20))
(0 10 13 20)
? (insert-element #'< 1 '(10 20 30))
(1 10 20 30)
? (insert-element #'< 40 '(10 20 30))
(10 20 30 40)
?