武蔵の日記 RSSフィード

2005 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 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 | 08 | 09 | 11 |
2012 | 03 | 04 | 06 | 07 | 08 | 09 | 11 | 12 |
2013 | 01 |

November 22(Mon), 2010

Ninety-Nine Lisp Problems - P09 の解答

| 23:16 |  Ninety-Nine Lisp Problems - P09 の解答を含むブックマーク  Ninety-Nine Lisp Problems - P09 の解答のブックマークコメント

L-99: Ninety-Nine Lisp Problemsの問題を解答してみたよ。なんか、エレガントではないなぁ:

;; P09 (**) Pack consecutive duplicates of list elements into sublists.
;;     If a list contains repeated elements they should be placed in separate sublists.
;;
;;     Example:
;;     * (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-seed front sublist result l)
  (cond
   [(null? l) (append result (list sublist))]
   [(eq? front (car l)) (pack-seed front
				   (append sublist
					   (list front))
				   result
				   (cdr l))]
   [else (pack-seed (car l)
		    (list (car l))
		    (if (null? result)
			(if (null? sublist)
			    '()
			    (append result (list sublist)))
			(append result (list sublist)))
		    (cdr l))]))

(define (pack l)
  (pack-seed #f '() '() l))

(pack '(a a a a b c c a a d e e e e))

podhmopodhmo 2010/11/23 02:54 はじめまして。gauche.sequenceのgroup-sequenceがpackと同じ動きをしたりします。
(use gauche.sequence)
(define pack group-sequence)

sirocco634sirocco634 2010/11/23 10:47 > podhmo さん
コメントありがとうございます!
そんなものがあったのか。。。

あとでソース読んで、自分のコードと比較してみます!!!

トラックバック - http://d.hatena.ne.jp/sirocco634/20101122