重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

「.c」の拡張子をもつファイルのモードをc-modeにする.emacsの設定

(setq auto-mode-alist (cons '("\\.c$" . c-mode)
auto-mode-alist))

のcons の意味がよくわからなくて困っています。
あと、cons 'の  'マークがなぜ必要なのかわかりません。
調べてもなかなかcons の意味が単体で出てこなくて困っているので、誰か教えてください。お願いします。

A 回答 (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-756 …

参考URL:http://www.fan.gr.jp/~ring/doc/elisp-manual/elis …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/21 21:41

.emacs設定ファイルで使われるemacs-lispについては、


以下のURLが参考になりますでしょうか。

簡単に言うと、
(1)'(アポストロフィ)は、そのあとのリストを評価せずにそのまま扱う。
(2)consは#1の回答にあるように、リストの先頭に要素を入れて、新しいリストを作る。

となります。

参考URL:http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emac …
    • good
    • 0

あまり得意ではないのですが


consはconstructの略でリストの先頭に
加える時に使うんじぁなかったでしたっけ?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!