Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-12-12

KMRCLを眺める (36) APPENDNEW

| 14:58 | KMRCLを眺める (36) APPENDNEW - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (36) APPENDNEW - わだばLisperになる

今回は、KMRCLのlists.lisp中からAPPENDNEWです。

定義は

(defun appendnew (l1 l2)
  "Append two lists, filtering out elem from second list that are already in first list"
  (dolist (elem l2 l1)
    (unless (find elem l1)
      (setq l1 (append l1 (list elem))))))

となっています。

L1に含まれていない要素だけ末尾に足してゆくのが分かります。

使用例/動作例は、

(APPENDNEW (LIST 'A 'B 'C 'D)
           (LIST 1 'A 2 'B 3 'C 4 'D))
;⇒ (A B C D 1 2 3 4)

という感じでしょうか。

CLの標準でもこういうのが用意されているような気がしたので、探してみましたが、PUSHNEWとも違うし、UNIONとも違うしで、ありそうで無い関数のようです。