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

GOOでL-99 (P05 リストを逆転させる)

| 01:23 | GOOでL-99 (P05 リストを逆転させる) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P05 リストを逆転させる) - わだばLisperになる

今回もlstクラスとflatクラスに対応させてみました。

matchはパターンマッチで変数を束縛するものです。しかし、なんだかあまり使い勝手は良くないような…。

catは、concatenateの略で、append的なところはcatを使うようです。

asは型変換で、CLだと、coerceですが、恐らくDylanの命名法からとってきたんだと思います。

pushfはCLでいうpushですが、引数の順番が逆です。

微妙に色々違っていて非常に憶えづらい(;´Д`)…。

また、GOOには標準でrevがあります。

(my-rev '(1 2 3 4)) ;=> (4 3 2 1)
(my-rev "foo") ;=> "oof"
(my-rev #(a b c)) ;=> #(c b a)
(my-rev #[a b c]) ;=> #[c b a]

(dm my-rev (u|<lst>)
  (if (nul? u)
      ()
      (match u 
        ((,H ,@T) (cat (my-rev T) (lst H))))))

(dm my-rev (u|<flat>)
  (def res () )
  (for ((x u))
      (pushf res x))
  (as (class-of u) res))