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

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

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

うーん、これだ!というようなpfcでの良い書き方がありそうな気がする問題ではあるのですが、全然思い付けません。

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

(define (pack lst)
  (if (null lst)
      ()
      (pack1 lst () ())))

(define (pack1 lst tem res)
  (let ((head (hd lst))
        (tail (tl lst)))
    (if (consp tail)
        (if (= head (hd tail))
            (pack1 tail 
                   (++ [head] tem)
                   res)
            (pack1 tail 
                   ()
                   (++ res [(cons head tem)])))
        (++ res [(cons head tem)]))))