Lispy Days

趣味で Lisp な日々 (index) (weblog) (view) (edit) (help)

Weblog

Nov 2004
MonTueWedThuFriSatSun
1  2 3  4 5 6 7
8 91011121314
15161718192021
22232425262728
2930     

November 23, 2004

jfli - a Java Foreign Language Interface for Common Lisp

http://jfli.sourceforge.net/

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-WHOHTML-Template をまとめて テキストドキュメントに Common Lisp を埋め込む。

CLHP - CLHP the Common Lisp Hypertext Preproccessor

http://common-lisp.net/project/clhp/

Apache に専用モジュールを組み込んで、PHP のようなものを目指している(いた?)。

LSP - Lisp Server Page

http://www.cliki.net/LSP

Web ページに Lisp を埋め込む。後に CLHP - Common Lisp Hypertext ProcessorCL-EMB がでてきた。

(view)

November 14, 2004

Lisp News

Memo

(view)

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 ...))

とかいうように.

(view)

November 02, 2004

LispMachine

思い出した!

を忘れていた。さらに S さんに教えていただいたネタ

  • Interlisp : Xerox PARC の Interlisp が Grammar Writer's Workbench というシステムの一部として公開されています

まだマニュアルも読んでませんが、ワクワクしますね!楽しそう。

(view)

October 31, 2004

久々に更新

うーん忙しくてなかなか更新できなかった。 気がつけば、

うーん、いろいろあったけど忘れた。

更新ついでにスタイルシートとテンプレートをいじってみた。

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)

で、ビルド成功。サンプルを動かすところまでできた。 というところで時間切れ。

(view)

June 27, 2004

CMU Common Lisp + Windows ?

ちょっと前に CMUCL Win32 port 手ぇつけてるよ〜という報告 があったけどどうなったんかな…。

(view)

June 20, 2004

CL-Wiki 更新

  • Windows 環境向けに修正したやつを置きました (see CL-Wiki)

CL and Tail-Call Elimination

Bill Clementson's Blog より

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 の元ネタの事なのかなぁ。

(view)

June 18, 2004

CL-Wiki 更新

変更点(bugfix)

  • Windows 環境で動かないとのバグを修正(ソケットの扱いを丁寧に)
  • files 以下のパスの扱いがだめだったのを修正

これで Windows でも blog.bat をダブルクリックですぐ使える環境に。

  • 古いファイルを置いてました…ぜんぜん修正されてねぇ 2004/06/20

(view)

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 をスクリプティングに〜という環境に近いものがあって便利。

(view)

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 用インターフェース作成

という順番で作りたい。が、UFFI が使える環境なら CL-SQL があるしなぁ…。

(view)