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-05-26

pfcでL-99 (P08 連続する要素を圧縮)

| 11:57 | pfcでL-99 (P08 連続する要素を圧縮) - わだばLisperになる を含むブックマーク はてなブックマーク - pfcでL-99 (P08 連続する要素を圧縮) - わだばLisperになる

pfcでは、可変長引数がないので、andもCLでいうeveryのようなものになっているようです。

(compress '(a a a a b c c a a d e e e e))
;==>[a b c a d e]

(define (compress lst)
  (if (null? lst)
      ()
      ((if (and [(consp (tl lst)) (= (hd lst) (hd (tl lst)))])
           (lambda (x) x)
           (cons (hd lst)))
       (compress (tl lst)))))

pfcでL-99 (P07 リストの平坦化)

| 11:57 | pfcでL-99 (P07 リストの平坦化) - わだばLisperになる を含むブックマーク はてなブックマーク - pfcでL-99 (P07 リストの平坦化) - わだばLisperになる

なんだか無理矢理ですが、折角なのでカリー化してみました。

(flatten '((0 (1 ((((2 (((((3 (((4)))))))) 5))))) (6 (7 8) 9))))
;=> [0 1 2 3 4 5 6 7 8 9]

(define (flatten lst)
  (if (null? lst)
      ()
      ((if (atom (hd lst))
           (cons (hd lst))
           (++ (flatten (hd lst))))
       (flatten (tl lst)))))