Weblog
Nov 2004 | ||||||
Mon | Tue | Wed | Thu | Fri | Sat | Sun |
1 |   2 | 3 |   4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
November 23, 2004
jfli - a Java Foreign Language Interface for Common Lisp
Common Lisp 処理系(現在は LispWorks のみ)に Java VM をロードして Java のライブラリを使おうという試み。後で試してみる事
Lisplets - a Lisp-friendly interface to Java Servlets
http://lisplets.sourceforge.net
Lisp や Scheme で使いやすい S 式ベースのサーブレットインターフェース 。 Tomcat, Resin, Jetty, JRun といったサーブレットコンテナで動作。 CL-HTTP, AllegroServe + WebActions, Araneida, mod_lisp など lisp での サーバーサイド環境も選択肢が広まってきた。CGI でも CLISP は FastCGI モジュールがソースツリーにはいっていたりする。
CL-EMB - Embedded Common Lisp and template system
http://common-lisp.net/project/cl-emb/
CL-WHO や HTML-Template をまとめて テキストドキュメントに Common Lisp を埋め込む。
CLHP - CLHP the Common Lisp Hypertext Preproccessor
http://common-lisp.net/project/clhp/
Apache に専用モジュールを組み込んで、PHP のようなものを目指している(いた?)。
LSP - Lisp Server Page
Web ページに Lisp を埋め込む。後に CLHP - Common Lisp Hypertext Processor や CL-EMB がでてきた。
November 14, 2004
Lisp News
- mod_lisp2 - mod_lisp がついに Apache 2.x 系列に対応
- http://www.international-lisp-conference.org/ - International Lisp Conference 2005 のページ
Memo
- ColorLisp? - 色で Lisp (S 式) を見やすく表現するってのは面白い!
- Chris Double - memcached 分散型メモリオブジェクトキャッシュシステム
- lemonodor - Biogarbage Collection : 生物も Mark and Sweep かぁ〜
- Bill Clementson - Allegro Common Lisp 7.0 と他の処理系のベンチマーク
- lemonodor ― What Are You Doing In Lisp, Right Now? c.l.l の話題 「今 Lisp で何やってる?」 のサマリ
- Ng Pheng Siong - Decimal And Money, quant books
- setup of a new challenge - 迷路探索のクイズでも出す気かな?
November 04, 2004
CLISP CVS 版で Meta Object Protocol サポート
久しぶりに cvs update したらファイルが増えてたので気になって impnote を読んだ. Meta Object Protocol のサポートが追加されたらしい.
pcase - 確率分岐
某掲示板で出ていた確率分岐のネタ.
(defmacro pcase (&rest lst) "確率分岐" (let (($p (gensym))) `(let ((,$p (random 1.0))) (cond ,@(do* ((forms nil) (p 0) (e lst (cdr e))) ((null e) (nreverse forms)) (when (consp (car e)) (push `(,(if (member (caar e) '(t else)) t `(<= ,$p ,(+ p (caar e)))) ,@(cdar e)) forms) (when (numberp (caar e)) (incf p (caar e))) (assert (<= p 1.0))))))))
CL-USER> (macroexpand-1 '(pcase (0.1 1) (0.2 2) (0.3 3) (t 4))) (let ((#:g5493 (random 1.0))) (cond ((<= #:g5493 0.1) 1) ((<= #:g5493 0.3) 2) ((<= #:g5493 0.6) 3) (t 4)))
でもこれだと 1/3 とかやるときに困りそう.1.0 とか固定じゃなくて ユーザーが指定できたほうが良いような気がする.整数で
(random-case 3 (1 ...) (1 ...) (1 ...))
とかいうように.
November 02, 2004
LispMachine
思い出した!
- Another way to get the LispMachiene : MIT の、あの Richard Greenblatt の、CADR エミュレータとディスクイメージ
を忘れていた。さらに S さんに教えていただいたネタ
- Interlisp : Xerox PARC の Interlisp が Grammar Writer's Workbench というシステムの一部として公開されています
まだマニュアルも読んでませんが、ワクワクしますね!楽しそう。
October 31, 2004
久々に更新
うーん忙しくてなかなか更新できなかった。 気がつけば、
- Allegro CL 7.0 Release がリリースされて Allegro Prolog や Perl 互換正規表現などライブラリが充実していたり。これで値段が安ければ……
- CMUCL/SBCL の Win32 移植が進行中 (CMUCL は self-host できるところまで行ってるとか)
- Araneida がいろんな環境で使えるとか (気づいてなかった…)
- SBCL でおなじみ danb が trivial-sockets というスクリプト言語風のソケットインタフェースを公開してたり 動機
- Maxima 5.9.1 がリリースされてたり
- lemonodor で紹介されてた Predicate Dispatch はおもしろそうだと思ったり
- CLRFI - Common Lisp Request For Implementation がはじまったり (うまくいくといいなー)
- Practical Common Lisp が順調に進んでいたり(既に amazon で予約済み)
- Lisa の 2.1 beta が出てたり
- The 90 Minute Scheme to C compiler - Marc Feeley @ Montreal Scheme/Lisp User Group の資料が面白そうだったり
うーん、いろいろあったけど忘れた。
更新ついでにスタイルシートとテンプレートをいじってみた。
Araneida on CMUCL + FreeBSD
Araneida を使うときに db-sockets パッケージのビルドに失敗する。 どうやら def-to-lisp.lisp が出力する C のコードがおかしいらしい。 見てみると、改行が…最新の CMUCL だと write でストリームに 出力するときに、改行が入ってしまうのが原因らしい。 これは C の構文的にはエラーになるので、 下記のように db-sockets/def-to-lisp.lisp を修正すればいい。 なんか write のオプションとかで変更できるような気もするけど、 今はとにかくはやく Araneida が使いたいから気にしない。パッチつくる 暇すら惜しい。
;; (dolist (d definition) ;; (write d :length nil ;; :right-margin nil :stream stream) ;; (princ " " stream)) (write-string (remove #\newline (with-output-to-string (s) (dolist (d definition) (write d :length nil :right-margin nil :stream s) (princ " " s)))) stream)
で、ビルド成功。サンプルを動かすところまでできた。 というところで時間切れ。
June 20, 2004
CL-Wiki 更新
- Windows 環境向けに修正したやつを置きました (see CL-Wiki)
CL and Tail-Call Elimination
Common Lisp で実装した末尾再帰の最適化。おもしろい〜。
Acclaim Enhanced
lmonodor より lisp なプレゼンテーションツール。
BSD Magazine vol 20
「Emacs で生きる」という特集があったのでフラフラと購入してしまいました。
全体的に lisp 色は薄めの内容だったけど、これで Emacs を通じて lisp を触る人が増えると良いなぁ。簡単な設定から便利な使い方、面倒なフォントの設定まで一通りそろってました。以下気になった点をいくつか。
ツッコミ
作業用バッファには with-temp-buffer マクロを使うほうが楽じゃないかなー。buffer-string とか match-string で結果取り出せばいいような。
(defun imgsrc (filename) (interactive "Ffile: ") (let ((template "<img width=%s height=%s src=\"%s\" alt=\"[]\" />") (width 0) (height 0)) (with-temp-buffer (shell-command (format "identify %s" filename) (current-buffer)) (beginning-of-buffer) (re-search-forward "\\([0-9]+\\)x\\([0-9]+\\)") (setq width (match-string 1)) (setq height (match-string 2))) (insert (format template width height filename)) (search-backward "[")))
機能は減っているが、set-buffer, kill-buffer を手動でやるくらいなら with-temp-buffer を紹介したほうが良いような。
あと気になったのは
(while hoge-list (setq item (car hoge-list)) (princ item) ;; 処理 (setq hoge-list (cdr hoge-list)))
という書式。
(dolist (item hoge-list) (princ item)) ;;処理
のほうが楽だし後々便利な気がします。
(if 条件 (progn 式1 式2 ...))
も
(when 条件 式1 式2 ...)
のほうが括弧もインデントも少ないので初心者向けだと思います。
;; (setq list (cons (cons "key" "val") list) (push '("key" "val") list) ;; (setq path (append '("/a/b/c") path)) (push "/a/b/c" path)
…とかいうツッコミはおそらく私が Common Lisp な人だから気になるのかなぁ。でも Emacs の紹介が目的なら短くて簡潔な表記のほうが印象が良いと思いませんか?
あと match-paren 関数は Emacs 附属の FAQ では?それとも FAQ の元ネタの事なのかなぁ。
June 18, 2004
CL-Wiki 更新
変更点(bugfix)
- Windows 環境で動かないとのバグを修正(ソケットの扱いを丁寧に)
- files 以下のパスの扱いがだめだったのを修正
これで Windows でも blog.bat をダブルクリックですぐ使える環境に。
- 古いファイルを置いてました…ぜんぜん修正されてねぇ 2004/06/20
June 07, 2004
メーリングリスト@gmane.org
Lispmeister.com より Lisp のコードが投稿されているメーリングリスト。
CLSQL紹介
Bill Clementson's Blog より CLSQL の紹介。うーん、待ってりゃ CLISP にも対応してくれるかなー。
Rhino : JavaScript for Java
なんとなく JavaScript を勉強したくなったので環境を整えてみました。
をインストールして、次のような jsshell という名のシェルスクリプトをパスの通った所に置くだけ。
#!/bin/sh java -classpath $HOME/local/rhino1_5R5/js.jar org.mozilla.javascript.tools.shell.Main $@
うーん、JavaScript もわりと面白い。特に Rhino からは Java の機能が使えるので Java をスクリプティングに〜という環境に近いものがあって便利。
June 06, 2004
SQLite binding for CLISP
お手軽にデータベースが使える SQLite の CLISP-binding を作り始めてみた。CLISP の FFI はあまり良く知らないので勉強を兼ねて。
[1]> (load "sqlite") ;; Loading file /home/lambda/commonlisp/user/sqlite.lisp ... ;; Loaded file /home/lambda/commonlisp/user/sqlite.lisp T [2]> (use-package :sqlite) T [3]> (connect :database "sample.db") #<FOREIGN-ADDRESS #x08192A00> [4]> (sql "CREATE TABLE Sample(id NOT NULL, val NOT NULL);") :SQLITE-OK [5]> (dotimes (i 100) (sql (format nil "INSERT INTO Sample VALUES(~A, ~A);" i (* i i)))) NIL [6]> (sql "SELECT * FROM Sample LIMIT 10;") (("0" "0") ("1" "1") ("2" "4") ("3" "9") ("4" "16") ("5" "25") ("6" "36") ("7" "49") ("8" "64") ("9" "81")) ; ("id" "val") [7]>
…が、探せば既に誰か作ってそうな気がしてきた。ちょっと調査してみよう。
http://members.optusnet.com.au/apicard/ に LispWorks 用インターフェースを発見。CLISP 用のは無いのかなぁ?
- CLISP 用インターフェース作成
- UFFI 用インターフェース作成