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-09-27

seriesの結果が変

| 15:00 | seriesの結果が変 - わだばLisperになる を含むブックマーク はてなブックマーク - seriesの結果が変 - わだばLisperになる

以前から、SERIESで(subseries (series 'b 'c) 0 5)の結果が#Z(LIST B C LIST B)という風に余計なものが混ってしまうのが謎でした。

このLISTってのはなんなのか、新しい仕様なのか?等々色々考えたものの放置していましたが、quekさんの環境では、こういった現象はないとのことで、これは新しい仕様なんかではないことに気付きました(笑)

まず、自分の環境構築の方法がおかしいのかと思って色々な組み合わせで、(asdf-install:install :series)を試してみましたが変化なし。

quekさんは、cl-buildで構築しているとのことで、その辺が鍵かと思って自分もcl-buildを試してみたところ上の例でいえば、#Z(B C B C B)という風に正常な結果を得られるようになりました。

cl-buildでインストールされたもののソースを眺めてみたところ、asdf-installで入手できるソースより新しかったため、最新のソースを求めて、CVS版をインストールしてみたところ、これも正常な結果を得ることができました。

手元の環境は、SBCLですが、このような謎の現象に遭遇された場合は、CVS版の利用をお勧めしたいと思います(といっても自分はバグフィックスのログ等はちゃんと読んでませんが…(^^; )

ClojureでL-99 (P10 ランレングス圧縮)

| 14:25 | ClojureでL-99 (P10 ランレングス圧縮) - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでL-99 (P10 ランレングス圧縮) - わだばLisperになる

Clojureでは、lambdaは、Arcのようにfn(ファンと作者は読んでいた)と書けるので楽で良いです。

また、リーダーマクロによる更なる略記法もあって、#()でArcの[]のようなことができます。

引数は、UNIXのシェルのように%1、%2、%3...と番号で参照できます。さらに良く使う%1は、%だけでも良し。

(defn
  #^{:doc "P10 (*) Run-length encoding of a list."
     :test (do (test= (encode '(a a a a b c c a a d e e e e))
                      '((4 a) (1 b) (2 c) (2 a) (1 d)(4 e)))
               (test= (encode []) [])) }
; ------
  encode
; ------
  ([coll]
     (if (empty? coll)
       []
       (map #(list (length %) (first %))
            (pack coll)))))

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080927