« gcovでカバレッジテストをしてみる | トップページ | Common Lispのグローバル変数 »

PythonとRubyとLispのコレクション処理

コレクションの処理をするとき、Pythonではリスト内包表現を使うが、Rubyではブロックを使う。
例えば、コレクションcolの各要素を10倍した新しいコレクションを作るとき、Pythonなら次のように書く。

col = [1, 2, 3, 4, 5]
[x * 10 for x in col]

Rubyなら次のように書く。

col = [1, 2, 3, 4, 5]
col.collect{|x| x * 10}

両方とも、コレクションcolの各要素をxに代入して、x*10を評価した結果を新しいコレクションにする、という意味だ。

ところで同じコレクション処理をLispではどう書くのか?
いろいろな書き方があるが、loopマクロを使うと次のように書ける。

(setf col '(1 2 3 4 5))
(loop for x in col collect (* x 10))

オブジェクト指向のRubyとはかなり異なるが、Pythonのリスト内容表現とはよく似ていると感じる。

最近読んでいるPractical Common Lispでは、Lispを使ったモダンなプログラミング手法が紹介されていておもしろい。
Lispというと、古くてマイナーな言語と思われているかもしれない。
しかし、PythonやRubyをつかって現代的な開発をしているプログラマには、Lispの柔軟性は思いのほか気に入られるのではないかと考えている。

|

« gcovでカバレッジテストをしてみる | トップページ | Common Lispのグローバル変数 »

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1286769/35798671

この記事へのトラックバック一覧です: PythonとRubyとLispのコレクション処理:

« gcovでカバレッジテストをしてみる | トップページ | Common Lispのグローバル変数 »