今回は、処理系拡張のsetfのうち制御構造の拡張を眺めてみたいと思います。Lispの処理系には、setfの拡張が許されていますが、殆ど拡張は入れてない処理系から突飛なものを入れている処理系まで様々です。CLISPに結構拡張が入っているので、今回はCLISPを中心に眺めてみます。if)setfでifが使えるのですが、そこそこ便利かもしれません。ifを使ったマクロ展開がされてもsetfの場所として有効なので、言語コアでsetf展開が可能だと、かなり拡張されることになります。progn)prognも言語のコアなので、これもsetf化の底上げになります。locally)locallyも言語のコアなので、マクロ展開の結果への適用を考えているのだと思いますが、theの代わりに使える気もします。apply)が使えるので、ちょっとした変種というところです。Lispに実装されていたものですが、locative(参照)が扱えるので、かなり妙なことが可能です。let)内のxは外側のxをシャドウしていますが、末尾でx変数を返しているので、その参照に42を代入しています。スコープの外から代入できてる感じなのがエグいですが、ここまで極端な使い方は想定していなそうではあります。2))こんなことを考えていたようです。setqの場合は、値の方の参照に代入します。まとめ役に立ちそうなものから、面白機能なものまで紹介してみました。次回は、リスト操作系の拡張を紹介してみたいと思います。