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

ArcでL-99 (P09 連続して現われる要素を纏める)

| 11:38 | ArcでL-99 (P09 連続して現われる要素を纏める) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P09 連続して現われる要素を纏める) - わだばLisperになる

この辺から私の頭では結構考えないと解けなくなってまいります。

折角Arcなのでネストしたifを若干無理な感じで使ってみました。PG氏のソースを読むと、ネストしたifの場合は、述部以外は一文字字下げしてるみたいです。

'elseはどこかで、こういう風に書くと分かりやすいよ、ってのを見たので真似してみたんですが、なんか落着かない…。結局どんどんcondに近付いて行くような…。

(def pack (lst)
  (rev ((afn (lst acc tem) 
	     (if (no lst)
		  (cons tem acc)
		 (or (is (car lst) (car tem)) (no tem))
		  (self (cdr lst)
			acc
			(cons (car lst) tem))
		 'else
		  (self (cdr lst)
			(cons tem acc)
			(list:car lst))))
	lst () () )))

(pack '(a a a a b c c a a d e e e e))
;=> ((a a a a) (b) (c c) (a a) (d) (e e e e))