CL-USER> (start-up (the engine *bp-ze*))

car-mods and common-lisp

Recursive Macroexpansion

Yesterday, as a holiday coding, I made yet another macro-expansion system which allows for easier compile-time error handling, which I previously described in this post.

昨日、ゴールデンウィークの遊びコーディングとして、 前々から言っていた ものに相当する、 リスタートやコンディションと密に連携できるマクロ展開システムを作りました。

Some people may already know that this idea is not so new at all. In this post , nsiivola said that we can alternatively use an implementation-specific macroexpand-all. Also, macroexpand-dammit tries to give the similar feature within ANSI CL.

色々とすでに言われているように実は、 このライブラリ自体にそんなに新規性はありません。 まず、同じことを達成するためには、 nsiivola さんの言ったように、 マクロの中で実装依存の macroexpand-all を使うという手がありました。 他にも、ANSI CL の中だけで似た機能を作ろうと頑張っている、 macroexpand-dammit を使うという手もありました。

So why I made it? The first reason is that I didn’t want to use the implementation specific feature. The second is that, I didn’t want to use macroexpand-dammit which I have a bitter experience with it. When I once saw it, it was not maintained, the implementation was tricky, it has a bug, lacks test codes, and was also depended by some other famous library SXML, which I have no idea about and also lacks test codes.

ではなぜ作ったのか? 第一に、実装依存の要素を使うというのはあまり好きではありませんでした。 第二に、これは完全に個人的な理由なんですが、 macroexpand-dammit には苦い経験があるのであまり使いたくなかったというわけです。 このライブラリ、まず実装がトリッキー、バグが在る、テストコードがない、という問題だ らけのライブラリでした。

I once tried to maintain it on github and have my repo followed in quicklisp thanks to zach, but my change made some errors in those dependent libraries, and honestly I failed. I neglected. Currently quicklisp follows the older version. And I lack my interest now. (However, now I see some issues message from someone, so maybe I’ll try again)

一度、これを直してgithub上でメンテナっぽく振る舞おうと思い、quicklispにも申請したの ですが、 これを治そうとすると、実は有名なライブラリSXMLがこれに依存しているらしく、そこのコー ドを壊してしまうそうです。 で、さらに悪いことに、「メンテナになるよー」と一旦言ったにも関わらず 個人的に時間が取れなくて放置してしまったため、 zachさんには「メンテ出来ないならメンテナになろうとするな」と。正論ですね。すみませ ん。そんなこんなで、苦い経験だったので触りたくなかったのです。(なんか今見たら issueが飛んできていますね・・・そろそろ頑張り直すかも。)

Recursive-Macroexpansion has the completely different expansion algorithm than those of Common Lisp’s macro expansion. CL is based on macroexpand-1 and macroexpand while Recursive-Macroexpansion is based on rmacroexpand only. However, normal macros are transparent to macroexpand, so mixing normal macro and recursive macro is completely ok.

Recursive-Macroexpansion は普通の Common Lisp の展開とは別のアルゴリズムで 式を展開します。 CL での展開は macroexpand-1 と macroexpand でできていますが、 Recursive-Macroexpansion は rmacroexpand だけで出 来ています。 rmacroexpand は、対応する recursive-macro がなかった場合 普通の defmacro で定義されたマクロを探し、普通の macroexpand-1 で展開するので、 recursive-macro と普通のマクロを混ぜることは全く問題ありません。

BIG NOTE : This is my FIRST library written in controversial CL21. Thanks to Fukamachi ! The reason I chose CL21 is simply because I was interested in it and want to try it. However, adoption of CLtL2 Sec.8 environment was also a key factor, because it uses augment-environment many times.

これはまあCL21で作った最初のライブラリです。使いながらCL21のバグフィック スもいくつかしました。 深町さんGJ! CL21を使った理由は、まあ使ってみて感触を試してみたかったというのもありますが、 CLtL2の &environment 構造体関連の関数がCL21ではデフォルトで入っているというのが 鍵でした。実装は augment-environment に多分に依存しています。(これをしてしまうと、 実装依存の macroexpand-all とどう違うんだと言われてしまうかもしれませんが・・・)

https://github.com/guicho271828/recursive-macroexpansion

Lisp on OpenCL は少しずつやってますがあんまり進展はないので、次回はマクロの話をまた 英語併記でやります。

Project Started: Lisp on Opencl

Radeon HD5770と nVidia TESLA c1060 およびニュー電源を手に入れたので、 この一週間は、 C言語のサブセットであるOpenCLにコンパイルされるlisp拡張を制作する予定。 まあ、肝心のビデオカードがまだ動いていないんだけど・・・

なぜかというと、GPU用の補助電源ケーブルの手持ちがないから。 やろうと思えば自作もできるんだけど、さすがにこれぐらい買おうかなと思う・・・

なお、試しに電源を入れてみた(補助電源無し)ときには、おそらくきちんと動いていない からかものすごいファンがうるさかった。

スタイルをもとに戻した

octopressアップデート後に昔に戻ってしまったスタイルを 一部戻しました。 なんでoctopressデフォルトの文字はこんなに文字がでかいのかね。

TODO: タイトルバーの背景をカーボン調にする。

1
2
3
(defun myfunc (arg &optional (option :keyword))
  (declare (ignore option))
  (print arg))

^がlambdaの省略として使いにくいという話

お久しぶりです、浅井です。

論文やばかったり人の論文読んだりgithubで議論したりする毎日ですが、 表題の通りの議題について。

じつは、自分 括弧 を書くのがshiftキーのせいで結構苦痛に感じています。 ええ、lisperなのにです。

いや、括弧は好きなんです。好きなんですよ?大好きです。 でも、僕は手がかなり小さい。 <Right-shift + 8> は人差し指と小指を最大限伸ばして押すことになります。 そう、さながらメロイック・サインみたいなカンジで入力しています。

それでですね、二年くらい前、 数字キーのそのシフトキーのXmodmapを入れ替えてみた ことがあったんですよ。結局慣れずにもとに戻してしまいましたが。

(通常)

keycode  10 = 1 exclam 1 exclam
keycode  11 = 2 quotedbl 2 quotedbl
keycode  12 = 3 numbersign 3 numbersign
keycode  13 = 4 dollar 4 dollar
keycode  14 = 5 percent 5 percent
keycode  15 = 6 ampersand 6 ampersand
keycode  16 = 7 apostrophe 7 apostrophe
keycode  17 = 8 parenleft 8 parenleft
keycode  18 = 9 parenright 9 parenright
keycode  19 = 0 asciitilde 0 asciitilde

(入れ替え)

keycode  10 = exclam 1 exclam 1
keycode  11 = quotedbl 2 quotedbl 2
keycode  12 = numbersign 3 numbersign 3
keycode  13 = dollar 4 dollar 4
keycode  14 = percent 5 percent 5
keycode  15 = ampersand 6 ampersand 6
keycode  16 = apostrophe 7 apostrophe 7
keycode  17 = parenleft 8 parenleft 8
keycode  18 = parenright 9 parenright 9
keycode  19 = asciitilde 0 asciitilde 0

だって、lisp書く最中で数字ってそんなに使いませんよ。なにに使うんですか。 精々使っても 0 か 1 しか無いと思うんですよ。7とか8とか何時使うんですか。 だったら数字のキーだけ常にCapsLock状態のほうがいいじゃないですか。 括弧に殉ずるべきです。 すべてはparenthesesのもとに!

これと同じ考え方をやれば、(まあ自分のキーボードでは ^ に shift は要りませんが) ^ をshift無しで入力することも簡単だと思います。 あるいは、 cl21-mode みたいなマイナーモード作るとか。

というわけです。括弧のためにキーアサインを変更する・・・。 だれか真似してみたい人はいませんか。

CV Page 作成中

せっかく業績ができたんだから、 人の真似をして、自分のCVページを作ってみようと思う。

何がいるかな。 ここを見てみよう。 経歴、経験、interest、publicationsでしょ・・・ 職歴(アルバイトしか無いな)・・・

一方指導教員の自己紹介ページ 。うーん、どうやっても勝てん。

まだ時期尚早かなという気もしてきた。 うーん・・・どうしようかな。 せめてICAPS workshop 2014 終わってからにするか?

テスト2

テスト2です。 octopress, なんかおかしい?

ノートパソコンから投稿

ノートパソコンから投稿テスト。 環境は(ほぼ)クリーンインストールな13.10。

ビルドに必要だったのは

sudo apt-get install ruby-dev libxml2-dev libxslt-dev g++
sudo gem install bundler
bundle install

ひさしぶりの更新

テスト,テスト,テスト。

あまりにも長いこと更新していなかったので、 更新の仕方を忘れてしまった・・・ 最近細かいことはQiitaにばっかり書いているからなあ。 特に書くべき日記もないし。

一番問題なのは、セットアップのやり方を忘れたので (octopress + ruby) ノートパソコンから更新できないこと。 ノートパソコンもデスクトップもどちらもまんべんなく使うから、 書きたい時に書こうとしても、面倒くさくなっちゃうんだよね。