2019/08/24 本町オープンソースラボ(大阪府大阪市中央区瓦町3-4-9) https://tcool.connpass.com/event/117789/
@fukamachi が聴いた質問をまとめました。
一般的かどうかはわからないです。~/.roswell/local-projects
に置く以外に、~/common-lisp
に置いたものもASDFが探してくれます。
シンボリックリンクでも元をたどって探してくれるので、 ln -s ~/path/to/project ~/common-lisp
とかしておくとql:quickloadできるようになります。※1
myaoさんは asdf:load-asd
でロードしてから ql:quickload
しているそうです。自分のプロジェクトを使う場合に開発版と安定版を使い分けたいという要求からだそうです。
システムがどこからロードされているかは、 (ql:where-is-system :yubin)
とやるとわかります。
※1シンボリックリンクはClozure CLで動かないという話もありました
Error finding package for symbol "POSITIVE-FIXNUM":
The name "ALEXANDRIA.1.0.0" does not designate any package.
[Condition of type ASDF/FIND-SYSTEM:LOAD-SYSTEM-DEFINITION-ERROR]
lemのREPLではlemに必要なライブラリがすでにロードされており、Alexandriaもロードされている状態です。 そのバージョンとQlotでロードした依存ライブラリとしてのAlexandriaのバージョンが違うため起きていたようです。
lemでは M-x slime
で新しいLispプロセスを立ち上げてQlotを実行するとよいです。
また、 qlot:quickload
する以外に独自のlemコマンドを .lem/init.lisp に追加することで、QlotのプロジェクトローカルQuicklispを有効にしたREPLを起動できます。
M-x slime-qlot-exec https://github.com/fukamachi/.lem/blob/master/init.lisp#L12-L14
C-cで終わります。
ros -l file.lisp
で実行できます。
Roveの昔のバージョンでは deftest
が関数定義になっていましたが、Roveのバージョンが0.9.0以上ではこの問題は起きません。
Roveのアップデートをすると問題は解決します。
アップデートは ros update rove
で行います。
もしQuicklispで (ql:quickload :rove)
でインストールしている場合は (ql:update-all-dists)
でQuicklisp distをすべてアップデートできます。
- PDFからコードをコピーするとクォート・バッククォートが異なる文字になり実行できない
- 4.3のテストコードの閉じカッコの位置が違う
- 4.4のテストが「谷」の字が異なるために通らない
- .roswell/local-projects にプロジェクトを作る+Qlotを使うと ~/.roswell/local-projects/yubin/quickslisp にプロジェクトローカルQuicklispがインストールされてしまい、再帰的に呼び出されてしまう