Collatz 予想 (キミならどう書く 2.0 - ROUND 2 -)

時間ができたので考えてみた。そのまま素直に書いてみた。 #!/usr/bin/env gosh (define (g n) (define (f n step) (cond ((= n 1) step) ((even? n) (f (/ n 2) (+ step 1))) ((odd? n) (f (+ (* n 3) 1) (+ step 1))))) (f n 1)) (define (h n) (let loop …

define-syntax でユニットテスト

結城さんが define-syntax を使った debug マクロ(デバッグプリント - 結城浩のSICP日記 - sicp)を紹介されている。マクロの便利な使い方の好例だと思う。Scheme ではなく、Common Lisp の話になってしまうが、高い評価を受けている Practical Common Lisp…

研究者が Python を使うべき5つの理由と避けるべき5つの理由

最近よく見かける10の理由が面白いので書いてみたいと思った。「Pythonを使うべき10の理由」的な内容にしようかと思ったのだが、一般論として書くよりは、個人的に Python を最もよく利用するシーンである、研究室における利用を想定して書いてみた方がよ…

for

Scheme だとあまり使う場面はないだろうけど、普通の for 文が使いたかったので書いた。一応残しておく。 (define-syntax for (syntax-rules () ((_ (var start end) body ...) (do ((var start (+ 1 var))) ((= var end)) body ...))))実行例。 gosh> (for …

Python のメソッドをクロージャとして使う

Python においてメソッドはユニークな性質を持っており、bound されているか unbound か、明確な違いがある。bound / unbound とは、そのメソッドが特定のインスタンスに属しているか、いないかという言い方が出来ると思う。 class Person(object): def __in…

Python の関数型っぽいプログラミング

Python はかなり関数型っぽいということがやっと分かったので、Scheme と比べつつ様子を探ってみたい。まずは Lisp ではよく高階関数の例として取り上げられるものをいくつか取り上げてみた。関数の合成。 ;; Scheme (define (compose f g) (lambda (x) (f (…

NumPy, SciPy

久しぶりにちゃんと Python でプログラム。ここ最近、Python 周辺も色々な変化があった。最近注目されている TurboGears や Django のような Web アプリケーション関係は興味はあるものの、それよりまずは NumPy と SciPy。ちょっと前まで Python で数値計算…

Gauche の拡張ライブラリでクラスを定義する

Gauche の拡張ライブラリで、自分でクラスを定義する方法、というよりメモとしてのテンプレート。正しい手順か不明だけど、とりあえず動く。安直だけど、"clos" という名前の拡張ライブラリを書くとして、Scheme で書くと次のような定義になるようにする。 (…

SLIME + utf-8 の件

今まで Common Lisp では計算ばっかりしていたので、扱うのは ASCII 文字ばかだったため気付かずに幸せに暮らしていたのだが、昨日ちょっと気が向いてテキストファイルを読み込んで集計するプログラムを作ってみようと思った。UTF-8 エンコーディングは SBCL…

SBCL threads on Intel Mac

CL 処理系 SBCL の Mac OS X / Intel におけるスレッドサポートに関する議論メモ(@sbcl-devl)。2006-03-21 Threads and Lutexes on Mac OS X for Intel Status Update より: Nathan Froyd and I have been working on getting threads up and running on Ma…

SLIME 2.0 Released

Emacs 上で動作する Common Lisp (CL) の開発環境、SLIME が 2.0 としてリリースされた。開発者の方々、お疲れさまです。今まで CVS を使っていたので、自分自身の環境としてとくに大きな変化はないものの、最新の SLIME がリリースされた意義は大きい。SLIM…

Objective-C <= GC

下記の「Objective-C Mac OS Xプログラミング」をパラパラと斜め読みしていたら興味深い記述があった。もしかすると Mac OS X 10.5 (Leopard) にはガーベッジコレクションが載るかも知れないとのこと。Mac OS X 10.4 上で man cc の上 -fobjc-gc 参照。

Objective-C MacOS X プログラミング

Objective-C Mac OS Xプログラミング作者: 荻原剛志出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/04/07メディア: 大型本 クリック: 94回この商品を含むブログ (24件) を見る生協に置いてあったので迷わず購入。著者の萩原さんは以前にも「Objec…

c-wrapper for Darwinports

最近話題の c-wrapper の Dawrinports 用 Portfile をサブミット。 http://bugzilla.opendarwin.org/show_bug.cgi?id=77923/17 追記:コミットされた。

パラメータ用ミニマクロ

gauche.parameter を使うときにちょっと楽できるように。 (define-syntax define-parameter (syntax-rules () ((_ var expr) (define var (make-parameter expr))))) (define-syntax with-parameter (syntax-rules () ((_ (param ...) body ...) (let ((para…

Plot

mac

最近見つけて気に入っている、二次元データプロットソフトウェア、Plot。Mac OS X でデータを可視化したいとき、gnuplot や R などの UNIX 系プログラムはあったものの、GUI で手軽に使えるものが見当たらなかったのだが、Plot がその穴を埋めてくれそう。作…

with-slots (2)

引き続き、define-syntax を使った with-slots マクロの定義について。昨日の shiro さんのコメントを受けて修正しつつ、Common Lisp の with-slots の仕様に近づくように修正。以下のサンプルコードを用意。 (define-class <person> () ((name :init-keyword :name)</person>…

with-slots

Common Lisp にある with-slots を Gauche でも使ってみる。次のクラスがあったとき、 (define-class <person> () ((name :init-keyword :name) (gender :init-keyword :gender) (age :init-keyword :age)))こんなふうに使えるようにする。 ;; Example-1 (let ((hoge</person>…

Carbon Emacs 'mac-option-modifier'

mac

銭谷さんの Carbon Emacs パッケージを12月版からテスト版へ更新。いつの間にか option キーを Meta キーとして使うオプション変数 mac-command-key-is-meta が使えなくなっていた(本家CVSの変更?)。*.el ファイルを grep してそれっぽい変数を発見。 (se…

Gauche を C プログラムから使う

libgauche をリンクすればできるみたい。http://www.practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction を参考に、外部の scheme コードをロードして結果を表示するプログラムを書いてみた。 main.c で同じディレクトリにある test.scm…

マクロを使ったジェネリック関数宣言の一例

x, y 座標をスロットに持つ vec クラスを考える。Common Lisp では次のような定義になる。 (defclass vec () ((x :initarg :x :initform 0d0 :accessor vec-x) (y :initarg :y :initform 0d0 :accessor vec-y)))ついでに factory も定義しておく。 (defun ma…

incase 12" Slim Sleeve (Black)

mac

アップルストア仙台に iWork '06 を買いに行ったら、incase 12" Slim Sleeve (Black) という iBook/PowerBook 12" 用のバッグが6280円のところを3400円で売っていたので一緒に購入。サンワのインナーケースは持っていたけど、手提げ付きのバッグは持っていな…

Native Gimp

mac

Mac OS X ネイティブで動作する Gimp が "OS X-native GIMP coming" (TUAW) にて紹介されていた。今までも X11 の上で動作するパッケージは存在していたが、今回は Gtk+ を移植しようという試みだ。Gtk+ の移植というプロジェクトは以前にもあったようだが、…

「http://www.yotabanana.com/lab/20060120.html#p01」の Ruby スクリプトを Scheme で書いたらどうなるか。ただの翻訳ではつまらないので、クロージャも取り混ぜてみる。 #!/usr/bin/env gosh ;; カウンタクロージャを保管する (define *counters* (make-ha…

プログラミング言語と数学

最近面白いと思って読んだ本に「素数の音楽」がある。この本では素数の分布に関する予想である「リーマン予想」を中心として話が展開していく。リーマン予想は発見されてから150年経ってもなお証明されていない数学界の大テーマだ。この予想を証明するには現…

Macworld 2006 Blogger

mac

さて、今夜日本時間 2:00 からはスティーブ・ジョブズのキーノートが予定されている。今回は Intel Mac の発表が行われるかもしれないということで非常に楽しみだ。現地の生情報を手に入れる良い方法はないかと思っていたところ、ちょうど良いサイトを見つけ…

do-array

数値計算に現れるパターンの一つに、ループを使って配列の各要素に何らかの演算を行うというものがある。頻出するパターンと来ればマクロの出番だ。Common Lisp のマクロの書き方について非常にわかりやすく書いてある "Macros: Defining Your Own" (Practic…

噂の Intel iBook

基本的にただの引用はしないようにしていたのだけど、この噂には反応せずにはいられない。APPLE LINKAGE (1/9)の「Macworld Expoに関する噂のまとめ」より今度発表されるかもしれない iBook は、 Intelのデュアルコアプロセッサ「Core Duo」を搭載し、より…

let-double

マクロの練習その2。Common Lisp では declare を使って変数の型を指定できる。コンパイラはより効率的なコードを生成してくれるので数値計算には便利。 (let ((a 2d0) (b 3d0)) (declare (double-float a b)) (let ((c (+ a b))) (declare (double-float c…

do-lines

マクロの練習で書いてみた、標準の dolist や dotimes マクロに類するループ系マクロ。名前の通り一行ずつ処理。 (defmacro do-lines ((line &optional (in *standard-input*)) &body body) `(do ((,line (read-line ,in nil 'eof) (read-line ,in nil 'eof)…