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 |

2008-03-10

CLOSでL-99 (P07 リストの平坦化)

| 01:53 | CLOSでL-99 (P07 リストの平坦化) - わだばLisperになる を含むブックマーク はてなブックマーク - CLOSでL-99 (P07 リストの平坦化) - わだばLisperになる

可能な限りif式を排除して型のディスパッチだけにしてみようということで、補助関数と本体の間で呼び出しあったりしてます。

なんとなくCLOSで解くというよりは、いかにQiの解答を移植するか、という感じになっています。

もしくは、型のディスパッチだけで、どこまで行けるか、みたいな(笑)

(flatten '(1 2 3 4 ((2 (3) 1) 5 6 7 () 8)))
;-> (1 2 3 4 2 3 1 5 6 7 NIL 8)

(defmethod flatten ((lst null)) () )
(defmethod flatten (lst)
  (flatten1 lst (car lst) (cdr lst)))

(defmethod flatten1 ((head cons) tail)
  (append (flatten head) (flatten tail)))
(defmethod flatten1 (head tail)
  (cons head (flatten tail)))