clisp
純粋なままでは生きていけませんでした。 今までCommonLispだけで書いていたパーサを、一部Cで書き直しました。 4.13秒かかっていた処理が、0.35秒になりました。速っ。 でも、調べ始めてからもう一週間近くたっているから早くはないね。 やっぱりCでのプロ…
引数の受け取り方 引数は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で取得できるシンボ…
clispでも使えるプロファイラ、profile.lispの使い方。コメントを読むと、Peter Norvig氏が"Paradigms of Artificial Intelligence: Case Studies in Common Lisp"で書いたらしい。 基本的な使い方 profile.lispをloadしてやって、with-profilingで時間を計…
概要 regexpパッケージで日本語を使う場合は、regexp:match-stringを使わずに自分で書きましょう そうしないと、うまく文字列を切り出す事ができません。 ;; バイト単位のsebseq(utf-8限定) (defun subseq-byte(str from &optional to) (ext:convert-string-…
最近、CommonLispで作っているテキストコンバータでレポートを書いてみた。 んー、どうも日本語処理が怪しいぞ。regexpパッケージが怪しそうだけど、まだわかんない。
ちょっと自信ないけど、一応。 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…