Shammer's Philosophy

My private adversaria

2009-04-01から1ヶ月間の記事一覧

Lisp IO 基本総まとめ

これまでの記事からの引用だが、参照したいときのために一纏めにしておく。 File 読み込み (with-open-file (input-stream "$READ_FILE_NAME" :direction :input) (loop (let ((line (read-line input-stream nil 'eof))) (if (eql line 'eof) (return)) (fo…

Lisp Simple Socket Client

with-open-socket を使用して Socket のクライアントを書く例。昨日のHTTP Request Reader - with-open-socket version - Shammerismに一発リクエストを送ってみる。 (defun send-message (destination-host destination-port message) (with-open-socket (c…

HTTP Request Reader - with-open-socket version

make-socket を使用していた実装から、with-open-socket へ書き換えたもの。 (defun open-echo-server () (format t "> Start OpenEchoServer...~%") (with-open-socket (server :type :stream :connect :passive :local-host "localhost" :local-port 8080 …

OracleがSunを買収・・・

ほんの数ヶ月前、IBMがSunを買収しようとしているというニュースを見て、業界再編は終わっていないんだなぁと思った矢先、先にBEAを買ったOracleがSunを買収することになったという報道。 これにはかなり驚いた。WebLogicとJRockitなどのミドルウェアを入手…

HTTP Request Reader

Clozure CL で、 HTTP のリクエストを読み込む それを画面に表示 簡単な応答を返す という、いわば http echo server 的なものを書いてみた。 (defun open-socket-server () (let ((args *unprocessed-command-line-arguments*) (host nil) (port nil)) (con…

Lisp で文字コード変換

ClozureCL で文字コードを変換する方法を調べてみた。そもそも、言語としてのデフォルトのエンコーディングは ccl:*default-external-format* で決まっているようだ。そして、何らかの文字操作というか、ストリームからの読み込み、ストリームへの書き込みの…

get-decoded-time

これを使うと、日付情報を取得できる。ただ、多値関数なので、受け取りにmultiple-value-bindを使用する必要がある。簡単なサンプルは以下。 (defmacro get-base-time (&rest body) `(multiple-value-bind (second minute hour date month year day-of-week …

Lispでリフレクション第01回

Lispで、Javaのリフレクションのようなことをやりたい。具体的には、(動的な)変数から呼び出したいメソッド名を 作成して、その変数名のメソッドをそのまま実行する、というようなイメージ。そのために以下のようなコードを 書いて試してみた。 (defun metho…

CLOSエクササイズ第03回

defclassで指定できるパラメータは、CLHS: Macro DEFCLASSなどに説明がある。これはマクロだったのか。あるフィールドの型を別のクラスにする、という例。このためには:typeを使用してフィールド(Common Lisp ではスロットというらしい)を定義すればよい。…

CLOSエクササイズ第02回

クラスの継承は、defclassの引数にスーパークラスをリストで指定する。 (defclass user () ((name :accessor user-name) (pass :accessor user-password) (age :accessor user-age))) (defclass administrator (user) ((role :accessor role-name)))このクラ…

CLOSエクササイズ第01回

Lispのオブジェクト指向は、Common Lisp Object System(略してCLOS)という。まずは、簡単にクラスを定義して、フィールドに値をセットしてその値を標準出力に出力、という単純なことをやってみる。クラスの定義は以下のとおり。defclassを使用する。 (defc…

最簡易デバッグプリントマクロ

プログラムを書いていると、デバッグ目的で変数の値を出力させたいことがある。単純に考えると以下のようになる。 (defun debug (value) (format t "Valueの値 : ~A~%" value))このvalueを二度書く(何の値を出力するのかと、実際の値取得のために)のが何と…

最後の数文字を取り出す関数

デフォルトでこういうのありそうだが、見つけられないので自分で定義。String用に欲しいと思ったが、使用する関数の内容的にはリストとベクタ(シーケンス)に対しては使えるはず。 (defun subseq-from-last (value-sequence x) (subseq value-sequence (- (…

Lispのdoループ(その2)

以前やったとき、うまくいかなかったのは単に構造、というか括弧の付け方を間違えていただけと判明。以下のようにすることでうまくいった。 (do ((i 0 (incf i))) ((< 10 i)) (format t "~A " i))括弧の使い方に間違いがあった。再度、doの構文を確認。 (do …