読者です 読者をやめる 読者になる 読者になる

ANSI Common Lispの規格書(に近いもの)のPDFを入手する【改】

『ANSI Common Lispの規格書(に近いもの)のPDFを入手する(http://g000001.cddddr.org/3676298293)』を自分の環境で試してみました(元記事に感謝!)。OS X 10.11.5、MacTeX 2016むけに、いくつか変更。ファイルのダウンロードにwgetではなくcurlを使用。P…

FASLファイルの中身を見てみた

Practical Common Lisp (邦訳『実践Common Lisp』) を改めて読み直し中。第2章でLISPファイルのコンパイルについて書かれていたところがあったので、いくつかの処理系で試してみることに。 準備 まず以下のような簡単なプログラムを作り、hello.lispとしてフ…

Octaveでの実装を参考にCommon Lispで正規分布の累積分布関数を計算

正規分布の確率密度関数は定義通りに ;; Normal Distribution ;; (normpdf 2 0 1) => 0.05399096581690089 ;; (defun normpdf (x mu sigma) (* (/ 1 (* (sqrt (* 2 pi)) sigma)) (exp (- (/ (expt (- x mu) 2) (* 2 sigma sigma)))))) で計算できるのですが…

SICP Exercise 1.4

Structure and Interpretation of Computer Programsの練習問題1.4のコードを見て、一瞬とまどいました。 (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) bが0より大きければ加算、それ以外は減算が戻ってきて、それがaとbの計算に用いられます。単に…

R言語のどこにSchemeが入っているのか

日本語版WikipediaでR言語のことを調べると、「影響を受けた言語」という部分にS言語とSchemeが書かれています*1。S言語から大きく影響を受けたことはもちろんのことですが、なぜSchemeなのかと常々思っていました。プログラムを見てもSchemeのようなLISP族…

SBCLでUnicodeを試してみる

(position #\本 "日本語") => 1 (aref "日本語" 1) => #\U65E5 てな具合に、ちゃんとUnicodeがサポートされていました。これはいい。

mapcarでsum-of-squaresを書き直す

mapcarを覚えたので、sum-of-squaresを書き直してみました。こんな便利なものがあるんだったら早く使えば良かった・・・。 (defun sum-of-squares (x) (if (null x) 0 (+ (* (first x) (first x)) (sum-of-squares (rest x))))) 上記のコードがもともとのsum…

GUILEってSchemeだけじゃなかったの?

GUILEがJavaScriptに対応というニュースを読んで、(若干)のけぞってしまいました。GUILEって、Schemeインタプリタじゃなかったの!? 「GCCってC/C++だけじゃなかったの!?」と同じような衝撃。

Common Lispの関数の引数

C言語やJava言語にはないMatlabの使いやすい点としては、関数から複数戻り値が返せる機能です。例えば、配列を並べ替えるのに使われるsort関数の戻り値は「並び替えられた配列」と「それが元配列の何番目にあったか」の2つです。CやJavaでも戻り値を構造体や…

Common Lispで統計

Common Lispで統計関数を書いてみました。和・平均・標本分散・平方和くらいが計算できれば、まずは何かできるのでは、という感じです。

Clozure CLがなかなかいい

Common Lispの勉強をSlime+SBCLでやっていましたが、Clozure CLもなかなか良いです。2年ほど前のバージョンと比べ、IDEが標準で付属したり、自動的にアップデートをしてくれたり、様々な点が改良されています。将来的にはCocoaと接続して開発をやってみたい…

Common Lispの=、eq、eql、equalなど

先日のエントリに書いたCommon Lispでの等価判定なんですが、今読んでいる栗原正仁『対話によるCommon Lisp入門』にきれいに説明されていました。 関数名 備考 = 数の判定 eq シンボルの判定 eql アトムの判定 equal リストの判定 で、eq⊂eql⊂equalという関…

Common Lispのtrace

traceなんていう便利コマンドがあるのですね。 (defun my-gcd (m n) (if (= (mod m n) 0) n (my-gcd n (mod m n)))) があったときに、Common Lispのプロンプトから以下のようにして使えます。 * (trace my-gcd) (MY-GCD) * (my-gcd 18 30) 0: (MY-GCD 18 30)…

こんなCommonLispコマンド

上から順に、ハードウェア種別、OS、マシン名、実装系、そのバージョン、内部ストレージ情報。こんな関数も用意されていたのですね。 * (machine-type) "X86" * (software-type) "Darwin" * (machine-instance) "xxxxxxxx.xxxxxxxx.xx.jp" * (lisp-implement…

対話によるCommon Lisp入門

性懲りもなくLISP関連書籍を買い続けています。今度は「対話によるCommon Lisp入門」です。過去に出版されていた書籍だったのですが、復刊ドットコム経由でPOD版として生まれ変わったという、ファンに支持されるCommon Lisp書籍なのだそうです。良い意味でジ…

Clozure CLでMac OS Xネイティブアプリの開発はできるけど

やっとClozure Common Lisp(旧OpenMCL)のMac OS X用32ビットx86版が登場しました。世の中にある無料で使えるCommon Lispの中では面倒なことなしにCocoaをサポートしてくれる、ほぼ唯一のものです。さっそくSVNでチェックアウトして、サンプルのCurrency Co…

Objective-CとLISPの微妙な共通点

オブジェクト指向言語では、クラス内のインスタンス変数には直接的なアクセスができないようにし、クラスの再利用性をあげるのが基本とされています。そのためにJavaでは変数や関数にはpublicと明示しないかぎり、クラス外のオブジェクトからのアクセスが制…