- ベストアンサー
emacsの設定
「.c」の拡張子をもつファイルのモードをc-modeにする.emacsの設定 (setq auto-mode-alist (cons '("\\.c$" . c-mode) auto-mode-alist)) のcons の意味がよくわからなくて困っています。 あと、cons 'の 'マークがなぜ必要なのかわかりません。 調べてもなかなかcons の意味が単体で出てこなくて困っているので、誰か教えてください。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 cons の名は基本データ型「コンスセル(cons cell)」を構築すること (construction of cells)に由来します。 (本当は歴史的経緯がいろいろあるのですが、下記のオンラインリファレンスに 詳しく書いてありますので略させていただきます。) コンスセルとは「(CAR . CDR)」という形で表現される、 2つのポインタが対になったオブジェクトのことです。 cons とは、「(cons object1 object2)」の形で、object1 を CAR(カー)、 object2 を CDR(クダー)とするコンスセルを構築するための関数です。 cons はリストの先頭に要素を1つ追加するためにしばしば用いられます。 この場合、auto-mode-alist という連想リスト(associative list, alist)の 先頭にコンスセルを追加したものを新たな auto-mode-alist として設定しています。 Lisp の性質として「(1 2 3)」のようなリストは「(1 . (2 . (3 . nil)))」と等価です。 だから、コンスセルを構築する cons を使って連想リストの要素を追加できるのです。 >あと、cons 'の 'マークがなぜ必要なのかわかりません。 これは、'でクォートしておかないと、括弧の中身が展開され、 「"\\.c$"」という名前の関数の呼び出しと解釈されてしまうからです。 で、当然ながらそんな変な関数は知らないと叱られます。 *scratch* バッファやミニバッファで「("\\.c$" . c-mode) 」を評価してみてください。 (setq list '((1 . 2))) (setq list (cons '(3 . 4) list)) またこのようにリストにどんどんコンスセルをつないで遊んでみるのも面白いでしょう。 elisp の仕様に関して最も詳しいのは当然ながら Lewis, LaLiberte, Stallman らの 「Emacs Lisp リファレンスマニュアル」(アスキー出版局)ですが、 私は手引書として yatex(野鳥)モードの作者・広瀬雄二さんの 「やさしい Emacs-Lisp 講座」(カットシステム)もお勧めします。 http://www.ascii.co.jp/books/detail/4-7561/4-7561-3414-9.html
お礼
ありがとうございました。 私は与えられた開発環境の中でプログラミングするのは まあまあできるのですが、いつも環境設定でミスするので、 OSの知識を総ざらいしているところです。