============================================== 2003.08.30 発行 =========
         極私的 Emacs カスタマイズ紹介マガヂン
            Emacs をわたし色に染めて♪
------------------------------------------------------------------------
                   番外 Emacs Lisp にありそうでないもの
------------------------------------------------------------------------
※あなたのカスタマイズをぜひ教えてください。一般的なものから、他の人は
 絶対にしないような「外道」なものまで、何でも結構です。

※解除の方法は、このメールの末尾をごらんください。
========================================================================

        ご無沙汰しております、でるもんた・いいじまです。

        さて、まぐまぐさんからまた「半年間、出していないので早く出してね」
        との催促がかかってしまいました。

        で、今月中に出す予定だったのですが、悪天候、周りの人間関係、そして
        私の身の上のことのトリプルパンチでダウン…というわけで、今回は短い
        ネタを 2 本です。どちらも、Emacs Lisp に存在していそうで、実際には
        存在しないもの。そして、それを無理やり書く方法です。

        本格的な記事は、できれば来月には出そうと思っています。ただ、来月は
        ちょっと山場が控えているので、もしかしたら再来月になるかもしれません。
        申し訳ございませんがそれまでお待ちください。

☆目次☆
        ・16 進数で定数を書きたい!
        ・do { ... } while () 構文がない!

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆16 進数で定数を書きたい!☆

        次回のテーマのために文字コードの研究をしていたのですが、そこで気
        づいたこと。Emacs Lisp には、16 進数の定数を書く方法がないんです
        ね。C、Perl、Java といった言語を真似て「0x40」のように書いても、
        エラーになってしまいます。Pascal 風の $40、BASIC 風の &H40 もダメ
        です。

        ところが、文字列中で "\x40" のように 16 進数を書くことはできます。
        また、「?○」と書くと、○という文字の文字コードを示します。
        (これについては今回は後回しにして、詳しくは第 27 回で説明します。)

        この 2 点を組み合わせると、

                ?\x40

        と書けば、きちんと 64 という数字になってくれます。これは何も
        0〜127 の範囲に限ったことではなく、たとえば

                ?\x1234567890

        といった書き方をすることもできます。ただし、桁数には限界があって、
        通常の PC では下 8 桁しか有効になりません(その場合、この式を評価
        すると 72775824 になるはずです)。古い Emacs ではもっと少ない桁数
        しか有効でない場合がありますし、Alpha のような 64 ビットプロセッサ
        ではこの 10 桁がすべて有効になります(この場合、この式の評価結果は
        78187493520 になるはずです)。

        この便法は、次回、文字コードを扱う際に多用することになりますので、
        文字コードに興味のあるかたはぜひ覚えておいてください。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆do { ... } while () 構文がない!☆

        もうひとつ、Emacs Lisp でこまることが、do-while 構文がないという
        ことです。C 言語なら

                /* 普通これは for か while-do だが、あえて do-while で書く */
                int i=1;
                do
                {
                        printf("%d\n",i);
                        i = i+1;
                } while (i<=10);

        のように書けますが、それに相当する構文が Emacs Lisp には用意されて
        いないのです。

        これも実は、以前に紹介した progn を使って、

                (setq i 1)
                (while (progn
                        (message "%d" i)
                        (sleep-for 1)
                        (setq i (1+ i))

                        (<= i 10)
                ))

        のように書けます。

        この構文の一般形は

                (while (progn
                        ...
                        ...
                        条件
                ))

        という形で、文法的には

                (while (progn ... ... 条件)
                        ; while の本体は空っぽ
                )

        と解釈されるのですが、意味的に前者の書き方のほうがいいでしょう。

        ここで progn というのは、if 文の then 節に使用したとき(第 2 回)
        には、複数の文をひとまとめにするために使いましたが、実はこの progn
        の正体、「複数の式を実行して、最後の式の評価結果を返す」という意味
        になっています。そこで、条件式まですべて progn の中に入れてしまい、
        その progn を while の引数に与えてやると、次のようなことが起こり
        ます。

                ・最初に、progn の中身を順に評価する
                ・progn の最後の式(つまり条件式)の評価結果が (progn ...)
                 全体の値として、while に渡される
                ・その結果、条件式の値が nil になれば、それでおしまい
                ・一方、条件式の値が非 nil であれば、while の中身(といっ
                 ても中身は何もない)を実行してから、再度 (progn ...) を
                 評価

        その結果、do-while 構文と同じ結果を得られることになります。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
☆次回予告☆

        次回は、前回予告した 3 件の中から、「Emacs 内部の文字コードの話」
        を選んでお送りする予定です。

        Emacs 内部での文字コードは、ASCII 文字についてはそのまま ASCII コ
        ードを使用しているのですが、それ以外の文字の扱いは非常に特殊です。
        その扱いの中身と、特に Emacs の内部コードと、よく慣れた JIS・シフ
        ト JIS・EUC コードとの相互換算を扱います。

        通常の日本語以外のコードとして、補助漢字(JIS X0212)、欧文系各種
        コード(ISO-8859-*)、韓国語(EUC-KR)、簡体字中国語(GB2312、EUC-
        CN)、繁体字中国語(Big5、CNS11643、EUC-TW)も扱います。

        ただし、JIS X0213、Unicode、GB18030 については、手元できちんと利用
        できる環境がないので、パスさせてください。

        それではまた♪

========================================================================
極私的 Emacs カスタマイズ紹介マガジン Emacs をわたし色に染めて♪

発行人  でるもんた・いいじま &lt;delmonta&#64;ht.sakura.ne.jp&gt;
        [ホームページ] http://www.ht.sakura.ne.jp/~delmonta/emacs/
        [掲示板]       http://6036.teacup.com/delmonta/bbs

配信    インターネットの本屋さん・まぐまぐ
        http://www.mag2.com/m/0000013484.htm
登録解除・メールアドレス変更は発行人ホームページからどうぞ。また、発行人
ホームページでは、第 0 回からのすべてのバックナンバーを公開しています。
========================================================================

Copyright © IIJIMA Hiromitsu aka Delmonta, 2016/03/10 15:09 JST
これは「古文書」です。 古くなった情報も原則未修正で保存していますのでご注意ください。

古文書本館トップ | 電脳外道学会