Common Lisp

opengl-text

http://github.com/Ramarren/opengl-text/tree/master (eval-when (:compile-toplevel :load-toplevel :execute) (require :cl-glut) (require :opengl-text)) (defvar *font-loader* (zpb-ttf:open-font-loader #p"/usr/share/fonts/truetype/vlgothic/VL-P…

clbuild

clbuild は Common Lisp のライブ ラリをインストールしたりアップデートしたりするスクリプト。 各ライブラリのリポジトリから最新バージョンを自動的にチェックアウトしてくる。 常に unstable. Debian と一緒。インストールはシェルで次のように行なう。C…

defclass-star 便利

defclass は defstruct にくらべると、:initarg や :initform を明示的に指定しなければならないあたりが面倒。 それを解決してくれのが defclass-star. ;; こんなふうに書くと (defclass* cat () ((eye-color "blue") (body-color "シールポイント") (lovel…

小さな Forth もどきを作ってみた

(def-primitive :|create| のことろで codes-index を 0 に設定してなかったので、2回目以降の呼び出しが何もせず終っていた。 修正した。(2005/05/05) 今日はちょっと初心にかえって小さな Forth もどきを作ってみた。 実装は Common Lisp で、参考にしたの…

Common Lisp で無名関数の再帰

Common Lisp だとこんな感じ? (defmacro rlambda (lambda-list &body body) `(labels ((self ,lambda-list ,@body)) #'self)) (funcall (rlambda (n) (print n) (unless (zerop n) (self (1- n)))) 10) ん? むしろ引数に呼び出し元を持たせるのかな?

funcall read-from-string するわけ

Slime の起動では次のように read-from-string して funcall している。 (progn (load "/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.13550" :c…

Drakma 使用時の注意事項

Drakma - A Common Lisp HTTP client を使うときの注意事項。 *drakma-default-external-format* で external-format を指定しておく。 text/* 以外の Content-Type をテキストとして扱いたいときは、*text-content-types* に追加する。 Content-Length は省…

Elephant での Sqlite バックエンド

The Elephant Persistent Object Database で SQLite をバックエンドで使おうとしていつも失敗していたけど、どうやら sudo apt-get install sqlite3 していなかったぽい orz (require :elephant) (use-package :elephant) (open-store '(:clsql (:sqlite3 "…

mod_lisp 使って Apache の後ろで Hunchentoot を動かす

http://www.weitz.de/hunchentoot/#mod_lisp インストール % sudo apt-get install cl-modlisp % sudo a2enmod lisp /etc/apache2/sites-enabled/hunchentoot を作成する。 % cat /etc/apache2/sites-enabled/hunchentoot LispServer 127.0.0.1 3000 "hunche…

CL-CONT を使った継続ベースの Web アプリケーション

CL-CONT で継続を使って単にページ遷移するだけの Web アプリケーション。 基本はこんな感じで、あとはマクロでくるめばそれらしいものになるかしら。 (eval-when (:compile-toplevel :load-toplevel :execute) (require :hunchentoot) (require :cl-who) (r…

CL-INTERPOL - String interpolation for Common Lisp

以前http://cadr.g.hatena.ne.jp/g000001/20080318/1205851335でちょっとふれてあった CL-INTERPOL 便利だ。 頭に #? は付けなければならないけど、正規表現中のバックスラッシュを重ねる手間がはぶけるし、変数や式の埋め込みもできる。 これが常に有効でも…

cl-cont

cl-cont - A Common Lisp Delimited Continuations Library をちょっとさわってみた。 cl-cont は Common Lisp の継続ライブラリ。 (defvar *save*) (defun p1 () (print 1)) (defun p2 () (print 2)) (defun p3 () (print 3)) (defun f () (with-call/cc (l…

loop で フィボナッチ数。あるいは and

次のようにしてうまくいかなかった。 (defun fib (n) (loop for a = 0 then b for b = 1 then (+ a b) repeat n finally (return a))) b に (+ a b) をいれる時点で a は b になっていたから。 CLiki: Fibonacci を見ると、同じようなコードが載っていて、ど…

Hunchentoot を使っての最低現の Web アプリケーション

Hunchentoot と CL-WHO があれば Web アプリケーションが作れるが、Elephant も仲間に入れよう。 (eval-when (:compile-toplevel :load-toplevel :execute) (require :cl-who) (require :hunchentoot) (require :elephant) (use-package :hunchentoot)) ;; …

Debian AMD64 の SBCL 復活

しばらく動かなくなっていた、Debian AMD64 の SBCL が動くようになった。