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-03-18


CLで学ぶ「プログラミングGauche」 (3)

| 23:42 | CLで学ぶ「プログラミングGauche」 (3) - わだばLisperになる を含むブックマーク はてなブックマーク - CLで学ぶ「プログラミングGauche」 (3) - わだばLisperになる

今回は3章「Gaucheの設計思想や誕生の背景」です。

Perlの影響

Gaucheは実用性を重視し、Perlの良いと思われる部分は積極的に吸収したということで、

  • 正規表現リテラル
  • 文字列間補完
  • モジュールシステム
  • DBI/DBD

等がPerlから受けた主な影響だそうです。

この辺は、最近では必須と考えられることが多いと思われるような機能でもあります。

Common Lispではどうかというと、Perl風の正規表現を提供するデファクトと言って良いような存在としては、CL-PPCREパッケージがあり、文字列間補完は、CL-INTERPOLあたりでしょうか。

モジュールシステムについてはちょっと考え方が異なりますが、CLには、標準でパッケージ機能があります。ただし、パッケージ機能は、ソースファイルの配布形態、読み込み方等を規定するものではないので、その辺を補完するものとしては、最近では、ASDFがデファクトになりつつあります。

DBI/DBDの例は、GaucheのPerlからの影響を受けたことを示す例だと思うので、横に置いておいても良いだろうと思われます。もちろんCLにもDB関係のパッケージも色々あります。

Common Lispの影響

勿論ですが、ここの説明は全部Common Lispに含まれています(笑)

  • キーワード引数
  • オブジェクトシステム(CLOS)
  • コンディションシステム

等が主な影響だそうです。

キーワード引数は確かに便利なので、良く使います。それと、ここには挙げられていませんが、オプショナル引数の扱いは、CL方式の方が扱いは単純で、簡単な故に普通に多用されています。

次に、CLOSは非常に強力と言われていますが、強力過ぎとも良く言われるようです。

CLのコンディションシステムもまた、非常に強力で、色々なことが可能です。

数理システムさんのCondition System (PDF)という親切なドキュメントがあるので、詳細はこちらを参照されると良いかと思われます。

ちなみに、私自身は、CLOSもCLのコンディションシステムも全然理解できていません(^^;

しかし、この二つは大規模なアプリケーションや、ミッションクリティカルなものの開発では、必須になってくるものではある気はします。

…まあ、素人が適当に小さいコードを、ちょこちょこ書く範囲ではそれ程深く追及する機会もあまりないということなのかも知れません。

これから出て来るGaucheの例をCLで書いたりして学んでみようと思います。

ArcでL-99 (P38 自作したオイラーのφ関数2種を比較)

| 02:33 | ArcでL-99 (P38 自作したオイラーのφ関数2種を比較) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P38 自作したオイラーのφ関数2種を比較) - わだばLisperになる

今回のお題は、P34と、P37で作成したオイラーのφ関数のベンチを取って速度を比較してみようという、お題になっているような、なっていないような微妙なお題です。

ということで、timeで比較してみました。

どうやら、P37の方が速いようです。

;----(P34 totient-phi)-------------------------------------------
;time: 597 msec.
;
;----(P38 phi)---------------------------------------------------
;time: 69 msec.

(let n 10090
  (prn)
  (prn "----(P34 totient-phi)-------------------------------------------")
  (time (totient-phi n))
  (prn)
  (prn "----(P38 phi)---------------------------------------------------")
  (time (phi n))
  (prn)
  nil)