ベルジャンエールタイプ(アサヒビール/福島工場)琥珀ヱビス(サッポロビール)今日も酒がおいしいです。昨日の続き(syntax-table)word-at-pointやsymbol-at-pointはメジャーモードごと、というかsyntax-tableごとに動きをかえてしまうので、適当なsyntax-tableを定義してつねにそいつを利用するようにしてみました。ELispEmacsで単語の省略形を定義する最近どうにかして同じようなコードを何度も何度も何度も書くような真似をしなくて良い方法はないだろうかと考えています。基本的にEmacsユーザーなので、Elispでそれっぽい機能を書けばいいんじゃないかと考えて思いついたネタの一つが、劣化yasnippetといいますか、単にある文章(単語)の省略形を登録しておいて、それを展開してもとの文章(単語)になるようにする、というものでした。補完があるのでたいして役に立たないかもしれません。name)))))単語の展開だけではつまらないので関数の呼び出しも行えるようにしました。syntax-tableによって、単語やS式(シンボル)の範囲が異なるあたりがめんどくさそうです。interactiveについての勉強にはなりました。)「皇国晴」は「みくにはれ」と読むらしい。日本酒2010年12月6日月曜日cl-gtk2cl-gtk2を使ってウィンドウに絵を書いてみます。t)))))画面上部のボタンを押すと、ウィンドウに線を描きます。ウィジェットを並べるにはv-boxやh-boxその他が使えるようです。TT6に参加してきました。その他参加者の皆様、どうもありがとうございました。内容についてはきっとどなたかがナイスな感じでまとめてくださるはずなので、帰宅して書いてみたネタを晒そうと思います。自分の中で要約すると、「おいコンパイラ、そのくらいのタイポでエラーをだすな。俺がやりたいことくらいわかるだろ?」という感じになりましたが、そのあたりに関連して、「Lispのネストした閉じ括弧をたくさん書くのが面倒、わかりにくい」というようなつぶやきが聞こえてきたので、なんとかしてみようと頑張ってみました。現れた時点で終端だと判断されます。J))))最大の問題は、エディタのインデント支援の恩恵を受けられなくなるというところ。Lambda(LOL)のalambda,aletあたりを読んで間接参照を定義する単純な方法を考えてみました。CommonLisp2010年11月25日木曜日#`..`で外部コマンドの出力を取得するPerlのバッククオートをパクってみました。kmrclのcommand-outputを使いめんどくさいところを丸投げします。URLを指定してプロジェクトをインストールすることができなくなりました。CL+SSLを利用してhttpsでも動かせるようなコードを書いてみました。パッケージ名が文字列かつ"https://"から始まっている場合の動きを若干追加しています。CommonLisp2010年11月18日木曜日テストツールその2関数を簡単にテストするなら、このくらい単純で良いような気もしました。Lispで図形を描くための27の方法ありがちなタイトルの付け方ですね。Lispで図形を描くために取り得る手段を列挙してみました。一部現在は使えないか、使うために努力が必要なものがあるかもしれません。ネタ2010年11月8日月曜日ユニットテストツールのようななにか動的言語を使う人達は、簡単なユニットテストくらいなら言語自体の機能をつかってぱぱっと書いてしまうのではないかと想像しています。私は趣味で適当なプログラムを書いているだけでろくにテストをしませんが、カバレッジのとりかたもわかったことなのでテストツールを書いてみました。前のエントリでは、SBCLでのカバレッジの結果の出力先はファイルパスと書きましたが、どうもSBCLでもディレクトリのパスっぽいです。してファイルを指定すると思い込んでいたのでしょう。Testメソッドがクラスに属しているかのような錯覚をおこす為のマクロタイトルどおりのものを作ろうとしてみましたが案の定ぐだぐだに。指定することで同じクラスのオブジェクトで共有されますが、共有されるだけで実際にインスタンスを生成しなければアクセスすることができません(たぶん)。クラス変数をメタクラスのインスタンス変数とすることで他のオブジェクト指向言語に近付こうとしてみました。ソースコードはgistに置きました。<FOO>>もっと頑張ってみても面白いかもしれない。Lisp(以下CCL)にはファイルのカバレッジを取り、HTMLで出力してくれる機能があるようです。ccl:*compile-code-coverage*をTにしてからカバレッジを取りたいファイルをコンパイル->ロードして、テストの実行とカバレッジの集計結果出力を行います。SBCLでは、SB-COVERパッケージを読み込んでから、ファイルのコンパイル、ロード、テスト実行、結果の出力を行います。結果の出力時に指定するパスは、CCLではファイル名ですが、SBCLではディレクトリ名のようです。Lispパッケージの内容を上書きするのはよろしく無いのではと思い、適当な名前でタイトル通りのものを書いてみました。CommonLisp2010年10月25日月曜日McCLIMで接続するディスプレイを選択するMcCLIMはX11プロトコルをしゃべるためにCLXを利用しています。ディスプレイ番号などを指定するのは最終的にはCLXの役割です。McCLIMからCLXのopen-displayがどのように呼ばれるかを眺めることで、接続するディスプレイを選択する方法がわかったような気分になりました。cdr部に属性リストがセットされる。clx-portオブジェクトはfind-port関数の中で作られる。*default-server-path*が渡されるので、この値を設定すると好きなディスプレイに接続できそう。この関数をserver-pathを引数として呼び出した返り値がclx-portにセットされる。server-pathとして利用する。設定されている関数を変更することでも接続するディスプレイを選ぶことが出来ると思われる。LispのオブジェクトシステムであるCLOSには、実行時にオブジェクトのクラスを変更する機能や、クラスを再定義するとそのクラスのオブジェクトが新しいクラスのオブジェクトへ変更されるという機能があるそうです。Lispの仕様上最長の関数名です。38文字が最長であるようです。クラスclass-aのオブジェクトを作る。オブジェクトのクラスをclass-aに変更する。キーワードパラメータ:bに値を渡す。change-classが呼ばれたときに裏で呼ばれる。objのクラスをclass-bに変更する。class-aでのスロットbの値が、class-bでのスロットcにセットされた。class-cを再定義する。新しいクラスのオブジェクトへ変換される。古いクラスのスロットの値が使われるようだ。再定義後のクラスへ変換する際に動作するメソッドを定義する。bindingなので、定義した関数の名前は字面上現れる位置でないと利用できません。(fuga))3変数ならばdeclareでspecial変数だと宣言すれば良いけれど、関数の場合どうすれば良いか分からなかったのでマクロを書いてみました。警告が出るかもしれない。