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

ArcでL-99 (P12 ランレングス圧縮されたものを復元する)

| 17:23 | ArcでL-99 (P12 ランレングス圧縮されたものを復元する) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P12 ランレングス圧縮されたものを復元する) - わだばLisperになる

前回のP11は、圧縮するものでしたが、そのデータを復元するのがお題。

Arcでmake-listに相当するものが見当たらなかったので自作しました。一応、newstringからの類推で、newlistという名前に。

make-listは全然違う名前になって潜んでたりして…。

(def decode (lst)
  ((afn (lst acc)
	(if no.lst
	    rev.acc
	    (self cdr.lst
		  (cons (if (atom car.lst)
			    car.lst
			    (apply newlist car.lst))
			acc))))
   lst () ))

(def newlist (size (o elt nil))
  ((afn (cnt acc)
	(if (<= cnt 0)
	    acc
	    (self (- cnt 1) (cons elt acc))))
   size () ))

(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))