2013-11-27-01-SBCLのdefconstant問題 - project-enigma

2013-11-27-01-SBCLのdefconstant問題

>> Site top >> weblog >> 月別アーカイブ >> 2013年11月のlog >> 2013-11-27-01-SBCLのdefconstant問題

最終更新日付:2014/01/02 00:00:00


SBCLのdefconstant問題

2013 年 11 月 27 日

ずっと以前から、SBCL で defconstant を使うとコンパイル時にエラーになるという問題に悩まされていた。プロンプトに対してひたすらに Go ahead を選択し続ければ一応はコンパイルを続行することはできるが、面倒臭くて仕方がなかった。で、これが恥ずかしい話なのだが、マニュアルをちゃんと読めばすぐに解決できることだったのだ。ようやくそれに気付いて修正したので、一応記録として残しておこうと思う。

SBCL のマニュアルには、次のような趣旨のことが書いてある。

「SBCL は ANSI 標準に厳格であり、ANSI は defconstant が同じシンボルに対して複数回実行された場合、以前の値と eql でなければならず、そうでない場合は未定義としています。SBCL では、これをエラーとしています。」

で、解決方法は上記の記述に続いて書かれていた。2.3 Idiosyncrasies - 2.3.4 Defining Constants だったかな。defconstant を以下のマクロ呼び出しに置き換えれば良い。

(defmacro def-constant (name value &optional doc)
  `(defconstant ,name (if (boundp ',name)
                          (symbol-value ',name)
                          ,value)
     ,@(when doc (list doc))))

英語のマニュアルでも我慢してちゃんと読まなきゃダメですね。反省。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Common Lisp

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.