• ベストアンサー

emacsの設定

「.c」の拡張子をもつファイルのモードをc-modeにする.emacsの設定 (setq auto-mode-alist (cons '("\\.c$" . c-mode) auto-mode-alist)) のcons の意味がよくわからなくて困っています。 あと、cons 'の  'マークがなぜ必要なのかわかりません。 調べてもなかなかcons の意味が単体で出てこなくて困っているので、誰か教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

こんばんは。 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

参考URL:
http://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html,http://www.cutt.co.jp/book/4-906391-70-2.html
msndance
質問者

お礼

ありがとうございました。 私は与えられた開発環境の中でプログラミングするのは まあまあできるのですが、いつも環境設定でミスするので、 OSの知識を総ざらいしているところです。

その他の回答 (2)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.3

.emacs設定ファイルで使われるemacs-lispについては、 以下のURLが参考になりますでしょうか。 簡単に言うと、 (1)'(アポストロフィ)は、そのあとのリストを評価せずにそのまま扱う。 (2)consは#1の回答にあるように、リストの先頭に要素を入れて、新しいリストを作る。 となります。

参考URL:
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html#SEC_Top
  • pierre2
  • ベストアンサー率24% (259/1070)
回答No.1

あまり得意ではないのですが consはconstructの略でリストの先頭に 加える時に使うんじぁなかったでしたっけ?