COMMON LISP JP > Archives > 2013/05/12

2013/05/12 04:16:22 UTCiyanaha
#
>g000001さん ありがとうございます。コンパイル時にrev関数が必要なのでそれを評価するのはわかりましたが
#
それならば (eval-when (:compile-toplevel) ...) だけで十分ではないでしょうか。
#
それとも、すべてのオプションを指定する理由があるのですか。
#
>llibraさん Common Lispの実行モデルを理解できるよい例はありますかね。
2013/05/12 04:22:07 UTCshiro
#
:compile-toplevelだけだと、そのソースファイルを直接loadしたり、その部分だけREPLに打ち込んだりした場合に評価されないです。わざとそう意図して書くなら別ですが、「どういう形であれCLがそのフォームを見た段階で評価しておいて欲しい」っていう場合は全部書くのが定石ですね。
2013/05/12 05:06:31 UTCsnmsts
#
実験されてみるのが一番早かろうと思いますが、 @bowbow99 さんの書いてある内容の通り地の文はloadとexecuteがついている状態でして
#
わざわざとっぱらうとevalされないタイミングができちゃいますので、よっぽどのことがないかぎりcompile-toplevelを足す(全部指定する)が基本になるかと思います。
2013/05/12 08:14:19 UTCllibra
#
言葉が浮かばず実行モデルと書いちゃいましたが、どちらかというとこの場合、評価モデルという言葉の方が正しかった気がします。他の方も仰るように、本やHyperSpecに書いてる内容を読んだ上で、色々試してみると良いんではないでしょうか。例えば、実践Common Lispには、shiroさんやsnmstsさんの解説されているようなことも含めて、比較的詳しく書いてあるようです。
#
Amazonで中身を検索すると、どんな感じか確認できるので、良いと感じたら購入してみてはいかがでしょうか。
#
英語でも良ければ http://www.gigamonkeys.com/book/the-special-operators.html で原著の当該部分を読むことができます。