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-16

QiでL-99 (P12 ランレングス圧縮の伸長)

| 00:55 | QiでL-99 (P12 ランレングス圧縮の伸長) - わだばLisperになる を含むブックマーク はてなブックマーク - QiでL-99 (P12 ランレングス圧縮の伸長) - わだばLisperになる

Qiでは、nthが0オリジンではなく、1オリジンというところにはまってしまいました。

(nth 0 ~)とかすると、処理系から返事がなくなってしまったりします。

(decode [[4 a] b [2 c] [2 a] d [4 e]])
\=> [[a a a a] [b] [c c] [a a] [d] [e e e e]]
\

(define decode
    [ ] -> [ ]
    [H | T] -> [(unpack* (nth 2 H) (nth 1 H) [ ]) | (decode T)] where (cons? H)
    [H | T] -> [[H] | (decode T)])

(define unpack*
    Item Cnt Acc -> Acc where (= 0 Cnt)
    Item Cnt Acc -> (unpack* Item (1- Cnt) [Item | Acc]))