2012年10月のlog - project-enigma

2012年10月のlog

>> Site top >> weblog >> 月別アーカイブ >> 2012年10月のlog

最終更新日付:2013/11/16 23:43:22


辿り着いた先

2012 年 10 月 03 日

最近、Common Lisp ばかりやっている。C++ をやり込んだあと、興味をそそられるような言語はこれしかなかった。日本語の情報が非常に少ないのに難儀するが、書籍も書いまくっている。CLtL2 の日本語訳書、Palm Graham の本を2冊、あと他に数冊というところ。

Read more

 

アルゴリズムとクロージャと

2012 年 10 月 07 日

以前書いたとおり、最近は Common Lisp で STL アルゴリズムと同じようなものを作っている。最初に書いたのは、ひとまず以下のようなものだった。

(defun copy-if (seq pred)
  (labels ((list-imp (lst acc)
             (if (null lst)
                 (nreverse acc)
                 (let ((itm (car lst)))
                   (if (funcall pred itm)
                       (push itm acc))
                   (list-imp (cdr lst) acc))))
           (array-imp (idx cnt acc)
             (if (<= cnt idx)
                 acc
                 (let ((itm (aref seq idx)))
                   (if (funcall pred itm)
                       (vector-push itm acc))
                   (array-imp (1+ idx) cnt acc)))))
    (cond ((listp  seq)
           (list-imp  seq nil))
          ((arrayp seq)
           (let ((cnt (length seq)))
             (array-imp 0 cnt (make-array cnt :fill-pointer 0))))
          (t (error "not a sequence.")))))

Read more

 

アルゴリズムとクロージャと - 2

2012 年 10 月 08 日

先日書いた、リストを直接扱うアルゴリズム。これの for_each 版は以下のようなものだった。

(defun for-each (seq func)
  (labels ((list-imp (lst)
             (if (null lst)
                 nil
                 (progn
                   (funcall func (car lst))
                   (list-imp (cdr lst)))))
           (array-imp (idx cnt)
             (if (<= cnt idx)
                 nil
                 (progn
                   (funcall func (aref seq idx))
                   (array-imp (1+ idx) cnt)))))
    (cond ((listp  seq) (list-imp  seq))
          ((arrayp seq) (array-imp 0 (length seq)))
          (t            (error "not a sequence.")))))

Read more

 

アルゴリズムとクロージャと - 3

2012 年 10 月 10 日

先日の続き。クロージャ以外の方法を検討する前に、気になっていることを確認した。それは、最初の(リストや配列を直接扱う)実装と、クロージャを使った反復子、それぞれについてリストと配列、合計4種類の実行時間を比べることだ。

Read more

 

アルゴリズムとクロージャと - 4

2012 年 10 月 15 日

前回まででクロージャを使用した反復子を使ってみたが、リストを直接扱うアルゴリズムよりもかなり遅かった。さらに別の方法を模索してみる。

Read more

 

アルゴリズムとクロージャと - 5

2012 年 10 月 17 日

「こっちの方が速いだろう」と思うものを試すたびにどんどん遅くなっていく。自信をなくしてしまうような経験だが、それはそれでいつか糧になる、と信じてみよう。今度はCLOS を試してみる。

Read more

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.