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-04-09

GOOでL-99 (P08 連続して現われる要素を圧縮)

| 01:24 | GOOでL-99 (P08 連続して現われる要素を圧縮) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P08 連続して現われる要素を圧縮) - わだばLisperになる

コレクションクラスに対応してみました。

コレクションクラスがどういう位置付けなのかいまいち分かっていませんが、リストやベクタのスーパークラスのようです。

1stはCLのfirstで、2nd、3rdまで標準で存在しています。

empty?は、コレクションクラスのオブジェクトが空であるかを判定するものです。

(compress "") ;=> ""
(compress '(a a a a b c c a a d e e e e)) ;=> (a b c a d e) リスト
(compress #(a a a a b c c a a d e e e e)) ;=> #(a b c a d e) タプル
(compress #[a a a a b c c a a d e e e e]) ;=> #[a b c a d e] ベクタ
(compress "aaaabccaadeeee") ;=> "abcade" 文字列

(dm compress (u|<col> => <col>)
  (if (empty? u)
      u
      (let ((prev (1st u))
            (but1st (sub u 1 (len u)))
            (res (lst prev)))
        (for ((x but1st))
            (unless (= x prev)
              (pushf res x)
              (set prev x)))
        (as (class-of u) (rev res)))))