common lisp

マクロ

展開形にsetfが出てくる場合には注意。 複数回評価したら問題が出る。 define-modify-macroでかけたらかく ; SLIME 2007-05-24 CL-USER> (defmacro incfw(x &optional (y 1)) `(setf ,x (+ ,x ,y))) INCFW CL-USER> (setf lst nil) NIL CL-USER> (incf (car …

WorkerThread

メソッドの起動(invocation)と実行(execution)の分離(Thread-Per-MessageとWorker Thread) - qnzm.log(クニジマログ)をLispで。 なんかお題があると書きやすいな。qnzmネタにしてごめん。Thread-Per-Messageは単にワーカーに投げるだけなので飛ばして、Threa…

Guarded Suspension してみた

qnzmのGuarded Suspension - qnzm.log(クニジマログ)を読んでcommonlispでやってみた。 SBCL限定。 目標は ・SBCLでのスレッドの扱いの勉強 ・あんまり触ってないCLOSでやる ・これもあんまり触ってないパッケージを切ってみる の3つ。でそれぞれの感想「ス…

seriesのリファレンス

seriesのリファレンス ふつーにあるじゃん。http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/clm.html ここのContentsの http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node1.html 下の方にある http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node347.ht…

common lisp CGI用のユーティリティ

common lispでCGIを書くときのユーティリティを書く。 あまり重いものを書く能力はないので、簡単なものを作りたい。 lisp-cgi-utilsでいいじゃないか、とは思うんだけど、自分でつくることに意味がある。。。んだと思う。enctypeにmultipart/form-dataを指…

;;どう書く?org 入出力の中継 を Common lispで

どう書く?orgの入出力の中継に手をつける。 コマンドライン引数は*posix-argv*に入ってくるらしい。 プロセスの起動はsb-ext:run-programでやるのがいいのかな? sb-posix:forkというのもあるので、fork→execする手もあるのか?と思ったらexecはない。 ??…

Common lispでURLエンコード、デコード

URLエンコード、デコードする関数。 sb-extを使ってるのでsbcl限定。 (make-array 0 :element-type '(unsigned-byte 8) :adjustable t :fill-pointer 0) 可変長の配列 (vector-push-extend (read-octet strm) vec) 配列を拡張して追加 (peek-char t strm nil…

common lisp と clsql と SQLite

clsqlでSQLiteにつないでみた。 CL-USER> (require 'clsql) NIL CL-USER> (require 'clsql-sqlite3) NIL CL-USER> (clsql:connect '("memory") :database-type :sqlite3) # CL-USER> (clsql:create-table 'tb0 '((id integer :not-null :unique :primary-key…

眠い

先週の木曜日から嫁の弟の嫁さんが生まれて7ヶ月の赤ちゃんをつれて遊びに来てる。 なんで来てるのかはぼかしておこう。 めちゃくちゃ可愛い。が、朝から元気よくバブーと起してくれるので、休日でも昼まで寝たりできない。。。(泣き) 眠いから箇条書きで。c…

vecorとstringと

眠いから適当。 (make-array 0 :element-type 'character :fill-pointer 0 :adjustable t) で可変長のcharacterのベクタを作る。 adjustableの指定で可変になるらしい。 fill-pointerの意味がよくわからん。 (vector-push-extend #\+ vec) でベクタに要素追…

;どう書く?org 分数を小数に展開 をCommonLispで

久しぶりに続き。 どう書く?に出題がどんどんでちゃって、追い付く気配が全くない。 マイペースでやってくか。 今回も処理速度とか無視。 例題は通ったけどバグはあるかも。 ;;どう書く?org 分数を小数に展開 (defun calc(x) (multiple-value-bind (a b) (…

mysqlとclsqlで文字化け その2

文字化け解決したっぽい。 [mysqld]にskip-character-set-client-handshakeって書いとくとサーバ側の文字コードをクライアントも使うらしい。 /etc/mysql/my.cnfはこう変更。mysqlはコメントした。 [mysqld] skip-character-set-client-handshake default-ch…

mysqlとclsqlで文字化け その1

emacs/slimeから接続して結果を取得しても、shellからつないでも日本語が化ける。 char(10)なカラムに "あいうえお"をInsertすると結果は "あいう■"みたいにつぶれる。 char(12)だと "あいうえ"になったから、一文字3バイト??になってるのか??わからん…

cl-sqlとmysql

commonlispでデータベースに接続したくなったので、cl-sqlを試す。 mysqlもclsqlも以前に入れていたけど放置してた。まずmysqlのパスワードを忘れているという問題が・・・。 次にclsqlでmysqlにつなごうとすると何やらエラーがでる。 なんだかlibmysqlclien…

どう書く?org ピラミッドを作る を common lispで

こんな感じ。 マクロを使いたくなる年頃。 あまり意味はないところが将来見たら恥ずかしいんだろな。 (defmacro string-times(n str) `(apply #'concatenate (cons 'string (make-list ,n :initial-element ,str)))) (defun pyramid(n) (dotimes (var n) (fo…

どう書く?org ウインドウの表示 を common lispで

久しぶりにどう書く.orgの続き。 僕が先に進よりお題が先に追加されてて永遠に追い付けないような気がしてきた。GUI表示ってどうやればいいの?というところからわからないので、「Common lisp GUI」で検索。 一番最初に見付かった日本語サイトにLTKって書い…

seriesと遅延評価

seriesで遅延評価されているか確認。 なんだかまたhaskellさわってみたくなってきた・・・。 前よりはわかること増えてるんじゃないかって思えるし。 ; SLIME 2006-11-26 CL-USER> ;;seriesで遅延評価の確認 ; No value CL-USER> (require :series) ("SB-CLT…

common lispがはやらない理由(かもしれない)

色々うまくできんかったので八つ当たり。0.括弧。色々な意味で使われてて、使われ方にも統一がないんじゃないか? (c d">*1 と (a b c d) と書くときがあっていちいち覚えていられない。 前置は別にいいと思う。僕は。 1.日本語の情報が少ない。 文法解説は…

seriesでいきなり挫折

map-fnを#Mってかけそうな雰囲気なのにダメ・・・。 no dispatch function defined for #\Mだって。なんか勘違いしているのだろうか???

CommonLisp Series

series入れてみた。 リファレンスどっかにないかなぁ。 ; SLIME 2006-11-26 CL-USER> (require :asdf) NIL CL-USER> (require :asdf-install) ("ASDF-INSTALL") CL-USER> (asdf-install:install :series) Install where? 1) System-wide install: System in …

どう書く?org 税込み価格への修正 を common lispで

つぎは税込み価格への修正 ・・・lispの正規表現ライブラリしらん。 ・・・lispでの回答を先に見てしまった。まぁいいや。 cl-ppcreというのがあるのか。あとは調べて頑張る。 cl-ppcreのリファレンスは↓ここ http://weitz.de/cl-ppcre/ おお。結構便利だ。 …

どう書く?org ;Hello, world! を common lispで

(princ "hello world") っと。

mapconとmapcar

mapcarとmapcしか使ったことなかった。 CL-USER> (maplist #'(lambda (a) (pprint a) (reverse a)) '(1 2 3)) (1 2 3) (2 3) (3) ((3 2 1) (3 2) (3)) CL-USER> (mapcon #'(lambda (a) (pprint a) (reverse a)) '(1 2 3)) (1 2 3) (2 3) (3) (3 2 1 3 2 3) h…

commonlispと文字コード

もう眠いからポインタだけ 文字ーバイト sb-ext:string-to-octetsバイトー文字 sb-ext:octets-to-string unsigned-bytehttp://lispuser.net/commonlisp/japanese.html

どう書く?org ;コインを減らす払い方 を commonlispで その2

コインを減らす払い方。できたつもり。 ずいぶん書き直したなぁ。これであってんのかなぁ。 まぁいいか。 ;;コインを減らす払い方 c (defmacro make-coins(yen1 yen5 yen10 yen50 yen100 yen500) `'((1 ,yen1) (5 ,yen5) (10 ,yen10) (50 ,yen50) (100 ,yen1…

どう書く?org ;コインを減らす払い方 を commonlispで その1

コインを減らす払い方 難しい。単純にロジックどう書けばいいかわからんぞ。 ひょっとして俺ってものすごいバカなのかも?(ショック)とりあえず、今書いたところまでのせとく。 関数を作るマクロを初めて書いた。 おもしろーい。 ;;コインを減らす払い方 (…

CommonLispで分からないことリスト その0

ちょっと何か書いてみようと思って、すぐに詰まった。 古典的なCGIを書こうと思ったんだけど、 ・文字コード変換 ・URLエンコード、デコード ってどうすりゃいいのかわからない。 標準ライブラリとかCLISP、SBCLのライブラリに入ってるのか、入ってないのか…

SBCLでプロセス間通信

会社でとんでもないことが発生していたのでずいぶん間が空いた。 まぁ、だれも読んでないからいい。とりあえずサーバ側 面倒だからインデントも整形しない。 (require :sb-bsd-sockets) (defpackage "SBCL-FAST-CGI" (:use "COMMON-LISP" "SB-BSD-SOCKETS") …

CommonLispで何かを作る 4 SBCLでCGI

CGIって #!sbclのパスその後にプログラムを書くって感じでいいと思うんだけど、sbclのパスってどこなんだろ? findで調べんのかなぁ、って思ってたら昔書いたメモ発見。 which xxxでパスがわかるってさ。 which sbclで /usr/bin/sbclて返ってきた。 というわ…

CommonLispで何かを作る 3 apacheを入れる

まずはApacheを入れる。Apacheのインストールと設定 インストール自体は簡単。 UbuntuだからSynapticパッケージマネージャでApacheを選ぶだけ。 あぁ簡単。 Synapticパッケージマネージャを立ち上げて「Apachem」で検索。 ん??Apacheって1.3xx系と2.xxx系…