Shammer's Philosophy

My private adversaria

2012-07-01から1ヶ月間の記事一覧

関数を生成するマクロ・その5

関数を生成するマクロ・その4 - Shammerismでの課題を解決できた。バッククォートより後の内容が展開式になるが、展開式の中で展開式で宣言される defun の関数名を作成していたのが原因だった。つまりはケアレスミスのようなものだ。うまくいかなかった例…

関数を生成するマクロ・その4

関数を生成するマクロ・その3 - Shammerismでは、関数名を直接渡していたが、似たような名前の関数を定義したいときには関数名のうちの違う部分だけを渡せばよいようにしたい。と、いうわけでそのための実装を考えた。ベースは関数を生成するマクロ・その3…

cygwinでgrepできない

最近、最新版のcygwin(具体的なバージョンは忘れた)をインストール。大抵のテキストファイルはgrepできるのだが、一部できないものがあって原因を調べるとどうやら文字コード(ありがちな気もするが)。解消方法が見つかったのでメモ。 xyzzyでそのファイ…

defpackage の :use は common-lisp-user だけではダメだった

defpackage の :use を使う - Shammerismで :use に common-lisp-user を渡せばいい、と書いたが、これだけでは不足だった。これだけだと in-package した後で関数を定義することすらできない。 ? (defpackage "TEST" (:use common-lisp-user)) #<Package "TEST"> ? (in-pack</package>…

defpackage の :use を使う

関数を生成するマクロ・その3 - Shammerismで言及したパッケージの問題。対処がわかったのでメモ。まず、default のパッケージは COMMON-LISP-USER になる。 ? *package* #<Package "COMMON-LISP-USER"> ? なので、パッケージを移動することなく作成された関数は、この COMMON-LISP-USER</package>…

Quicklisp + CLISP

Clozure CL へ Quicklisp をインストールしたので、ついでに CLISP にもやってみた。CLISP の場合は、起動時のオプションが -i になる。 clisp -i clisp -i quick.lisp (quicklisp-quickstart:install) (ql:add-to-init-file) (ql:add-to-init-file) を実行…

QuickLispデビュー

Clozure CL を 1.7 にアップグレードしたら・・・ASDFが使えなくなってしまった。 1.6 の頃とtoolsディレクトリの構成が異なる。何かインストール方法異なっているのかと調べていたが、 ASDF本家のサイトにこんな文字が・・・ASDF-install is OBSOLETE. DO N…

Emacs 24.1 でコピーできなくなった

自分の環境では、このサイトを参考にしてOSのクリップボードとEmacsのkill-ringを分けている。だが、Emacsをアップグレードしたためか、うまく機能しなくなってしまった。 (OSのクリップボードへ選択領域をコピーできない。not connected とか出力される。…

関数を生成するマクロ・その3

関数を生成するマクロ・その2 - Shammerismと関数とマクロでのクォートの扱いの違い - Shammerismの結果を併せて、以下のようなマクロを定義。 ? (defmacro public-symbol (s) `(export ',s)) PUBLIC-SYMBOL ? (defmacro generate-semaphore-accessor (name…

関数とマクロでのクォートの扱いの違い

関数を生成するマクロ・その2 - Shammerismで、export と defun ではクォートの期待値が異なることで問題が発生した。この問題を解決するため、エクスポートでもクォートなしで情報を渡すことができるようにしたい。とりあえず思いついたのが以下。 ? (defu…

関数を生成するマクロ・その2

とあるパッケージの中で、とある関数を宣言してから、それを外部で使用させるためにエクスポートする、という処理を行う必要があるが(まあ、エクスポートしなくても unintern されていなければ::でアクセスできるのだが)、これをやるのが結構めんどくさい…

関数を生成するマクロ・その1

プログラムを書いていると、どうしても同じようなパターンの関数を定義することになる。それも、アクセッサのような単調なもの。単調なくせに数が多く、これをもっとスッキリさせることができないかと思っていたが、どうやらマクロでできそうだとわかる。と…

macro 展開式を見易くする

pprint という関数があるようだ。pretty-print の略だと思うが、これを使用すると整形して式を出力してくれる。 (defun macro-check (&rest body) (pprint (macroexpand-1 body))) が、試してみたがうまくいかない。 ? (defun macro-check (&rest body) (ppr…