clisp

Cでモジュールの書き直し

純粋なままでは生きていけませんでした。 今までCommonLispだけで書いていたパーサを、一部Cで書き直しました。 4.13秒かかっていた処理が、0.35秒になりました。速っ。 でも、調べ始めてからもう一週間近くたっているから早くはないね。 やっぱりCでのプロ…

external moduleの続き

引数の受け取り方 引数はclisp側で確保された領域に置かれる。 そのため通常のCでの引数のようには扱えず、pushSTACK()、popSTACK()、skipSTACK()などのマクロを通じて、操作する必要がある。 あと、modprep.lispのおかげで、STACK_0、STACK_1のような形でス…

外部モジュールの呼び出し

clispでCの関数を呼ぶ方法。 概要 clispでCの関数を呼ぶには、FFI(Foregin Language Interface)を使う方法と、External Moduleを使う方法がある。 ドキュメントから特徴を抜粋すると、 Extenal Module FFI 備考 速度 ○ × 移植性 ○ × FFIはすべてのclisp環境…

バックトレース

clispでのバックトレースの表示の仕方。 clisp -i hoge.lispで読みこんで、エラーが出たら:bとか:uを押す。:hでヘルプ一覧。 そのうち、ちゃんと書くかも。

関数の差し替え

profile.lispから学んだ技法。ある関数を別の関数に差し替える。clispで試した。 これを使うとCLOSの:before/:afterが関数でも使える。というか、defmethodに変えて:before/:after使ったほうがいいかもしれん。 それには、symbol-functionで取得できるシンボ…

profile.lisp

clispでも使えるプロファイラ、profile.lispの使い方。コメントを読むと、Peter Norvig氏が"Paradigms of Artificial Intelligence: Case Studies in Common Lisp"で書いたらしい。 基本的な使い方 profile.lispをloadしてやって、with-profilingで時間を計…

regexpパッケージで日本語を

概要 regexpパッケージで日本語を使う場合は、regexp:match-stringを使わずに自分で書きましょう そうしないと、うまく文字列を切り出す事ができません。 ;; バイト単位のsebseq(utf-8限定) (defun subseq-byte(str from &optional to) (ext:convert-string-…

日本語回り

最近、CommonLispで作っているテキストコンバータでレポートを書いてみた。 んー、どうも日本語処理が怪しいぞ。regexpパッケージが怪しそうだけど、まだわかんない。

provideとrequire

ちょっと自信ないけど、一応。 CommonLispではrequireは同じファイルは一度しかロードしないと定義されている。 ただし、その機能を使うにはrequireされるファイルでprovideしている必要がある。 例えば、 ;; foo.lisp (provide "foo") (defun f(x) x)という…

コマンドライン引数の取得

(print ext:*args*)

ファイル一覧

ファイル一覧の取得。 #Pというのはpathnameオブジェクトの印かな? > (directory "*.txt") (#P"/Users/mzp/Workspace/ldoc/unittest.lisp" #P"/Users/mzp/Workspace/ldoc/test.lisp" #P"/Users/mzp/Workspace/ldoc/inline.lisp" #P"/Users/mzp/Workspace/ld…