Shammer's Philosophy

My private adversaria

2011-06-01から1ヶ月間の記事一覧

SBCLで文字列をドット表記のIPアドレスに変換する

SBCLでSocketをオープンする時に使用するIPアドレスは、配列(vector)で表現する必要がある。具体的には以下のような感じにする。 (let ((server-socket (make-instance 'sb-bsd-sockets:inet-socket :type :stream :protocol :tcp))) (sb-bsd-sockets:socket…

未定義のメソッドが呼び出されたときに備える

文字列と同名の関数を呼出す - Shammerismで動的メソッド呼出し(?)について書いたけれども、 すぐに「未定義のメソッドを呼び出そうとしてしまった場合にどうなるか」が疑問になった。処理系ごとに 異なってくるかもしれないが、とりあえず sbcl ではこうす…

文字列と同名の関数を呼出す

Java のリフレクションのようなことをやりたい。具体的には、文字列と同名の関数を呼出したい。 例えば、文字変数(String Symbol?)の値が hello のとき、関数 hello を呼出す、ということをしたい。 * (defun hello () (format t "Hello!~%")) HELLO * (func…

sbcl で socket からアドレスとポートの情報を取得する

clisp の SOCKET:SOCKET-STREAM-LOCAL SOCKET:SOCKET-STREAM-PEER に相当する関数を使ってみた。sbcl だと、 sb-bsd-sockets:socket-name sb-bsd-sockets:socket-peername が相当するようだ。multiple-value-bind で返り値を受け取ってやらないといけない点…

sbcl で文字列を扱う

Common Lisp と 日本語 と 文字コードが参考になった。ここのサイトの例をマネしてみたり、ちょっと自分でアレンジしていろいろやってみた結果。 UTF-8 の byte 配列を文字列にしてみる。 * (octets-to-string (concatenate '(vector (unsigned-byte 8)) #(6…

sbcl で Socket を使う

いろいろなサイトで情報を収集。とりあえず、(require :sb-bsd-sockets) を事前に実行しておく必要がある。以下、clozure と汎用性を持たせるために汎用関数を独自に定義。 (defun open-socket-server (port) (let ((interface #(0 0 0 0))) (handler-case (…

apt-get でインストールできる clisp は thread 未サポート

clozure は、Debian だと apt-get でインストールできないので、apt-get でインストールできる clisp がいいなと思っていじっていたが、apt-get でインストールされた clisp には thread を扱うパッケージが含まれていないことがわかった。http://www.clisp.…

技術志向革命

今日現在自分が思っていることを少々。一部、天才技術者と呼ばれる人たちがいる。そういう人たちとそうでない人の差は何か、と考えて、ひたすら技術を追い求めて、そうならんと勉強してきたが、最近は技術の勉強をし続けたところでそういう人の仲間になれる…

do-loop の終了判定タイミング

do でループさせる処理を書いていて、思った通りの箇所でループを抜けずにいろいろ試してみた。どうやら、ループ内で使用する変数の初期化処理があると、それを行うまで判定処理が実行されないらしい。時系列で整理すると、 do 内で使用する変数の初期化 終…

with-open-passive-socket を自作

with-open-file や、with-open-socket のように、 ストリームへのアクセスシンボルを呼出側で定義できるようにする passive socket(server socket) とわかっているので、そのためのオプションを指定せずに済むようにする クローズをするようにしたいが、わか…