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

QiでL-99 (P20 指定した要素を削除)

| 00:42 | QiでL-99 (P20 指定した要素を削除) - わだばLisperになる を含むブックマーク はてなブックマーク - QiでL-99 (P20 指定した要素を削除) - わだばLisperになる

若干ダレて来たような(;´Д`)…。

(remove-at [a b c d] 2)
\=> [a c d]
\

(define remove-at 
  [ ] _ -> [ ]
  X K -> X where (>= 0 K)
  [H | T] 1 -> T
  [H | T] K -> [H | (remove-at T (- K 1))])