2008-09-29
■ [tetris] ついにTAP/Tiのサントラが?
Club TGMの話。
なんと、Club TGM設立記念の大会が、
とある市のイベントとして開催出来そうな流れです(おぃ)。
がんばりますよ。
☆
んで、上記のイベントにおいてサントラ化の話を進めるので
取り締まりをビシビシいきますのでご協力をお願いします(ぺこり)。
つーか、自主的削除推奨。
お願いします。
サントラは歴代+アレンジ+映像で検討中。
がんばりますよ。
[Mihara's sub Layer | 『Amazon.co.jpからのお知らせ』と、Club TGMの事より引用]
映像とな?(wktk)
■ [scheme] Re: Scheme どう書く?的 - ひげぽん OSとか作っちゃうかMona-
先頭から1ずつ増えてる部分を取ってくる関数があればいいんじゃないかなぁと思って書いてみた。
(use srfi-1) ; last
(use srfi-11) ; let-values
(define (group-numbers ls)
(define (take-sequence+cdr ls seq)
(cond
[(null? ls)
(values seq ls)]
[(null? seq)
(take-sequence+cdr (cdr ls) (list (car ls)))]
[(= (car ls) (+ 1 (car seq)))
(take-sequence+cdr (cdr ls) (cons (car ls) seq))]
[else
(values (reverse seq) ls)]))
(if (null? ls)
'()
(let-values (((seq rest) (take-sequence+cdr ls '())))
(cons (if (= (length seq) 1)
(car seq)
(cons (car seq) (last seq)))
(group-numbers rest)))))
(print (group-numbers '(1 3 4 5 6 12 13 15)))
技巧的で短いのよりは、長くても読みやすい方が好きです(←長くなったいいわけ)。
id:katonaさんのutil.match版は短くてわりと読みやすいので良いなぁと思った。いろいろ書き換えながら動作を確認してみた。x+1?みたいな関数名が許されるのはLispならでは。
(use util.match)
(define (group-numbers ls)
(match ls
(() ())
((x . xs) (let1 x+1?
(lambda (y) (and (number? y) (= (- y x) 1)))
(match (group-numbers xs)
((((? x+1? y) . z) . rest) (cons (cons x z) rest))
(((? x+1? y) . rest) (cons (cons x y) rest))
(rest (cons x rest)))))))
(print (group-numbers '(1 3 4 5 6 12 13 15)))
おおむね、こんな感じ↓で動きます。
; x y z rest ; 6 (12 . 13) 15 ; 5 ; 4 ; 3 ; 1
[ツッコミを入れる]