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

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

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

flattenは、恐らくリストにしか使わないので、総称関数ではなく普通の関数にしてみました。

リストかどうかを判定する関数が見付からなかったのでlst?を作成。

また、GOOでは、引数の指定で戻り値の型をDylanのような記法で明記することができるので折角なので使ってみました。

pairはCL/Schemeでいうところのconsなのですが、GOOは慣例的な名前を悉く否定しているとしか思えません(笑)

(flatten '(1 () 2 3 4 5 6 ((7((((())))))) (8)))
;=> (1 2 3 4 5 6 7 8)

(df flatten (u|<lst> => <lst>)
  (cond ((nul? u) () )
        ((lst? (head u))
         (cat (flatten (head u))
              (flatten (tail u))))
        (#t (pair (head u)
                  (flatten (tail u))))))

(df lst? (u|<any> => <log>)
  (subtype? (class-of u) <lst>))