[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] learning lisp: cons



 r高橋です。

Reply TAKAHASHI Naoto <ntakahas@...>'s message:

} 引数が dotted pair のとき、car はピリオドの左側を、cdr はピリオドの右
} 側を返します。
} 
} (car '(a . b)) => a
} (cdr '(a . b)) => b
} 
} (car '(a b)) と (car '(a . b)) はどちらも a で同じになりますが、
} (cdr '(a b)) と (cdr '(a . b)) は前者が (b) 、後者が b と別になります
} ので注意して下さい。

 これは、(car)がリストの先頭「要素」を返すのに対して、(cdr)はあるリスト
から先頭要素を除いた残りの「リスト」を返すから、ということですね?

} さて、auto-mode-alist は dotted pair のリストです。つまり単純化すると、
} ((a . b) (c . d) (e . f) (g . h) ...) という形をしてます。ですからこれ
} に新しい要素を追加する場合は、
} 
} (setq auto-mode-alist
}       (cons (cons なんとか かんとか)
}             auto-mode-alist))
} 
} と書くことになります。内側の cons で新しく追加する要素となる dotted
} pair を作り、外側の cons でそれをリストの先頭に追加します。

 .emacsの、たとえばメールアカウントの情報を書くところは、リストですよね
……?
そこでは(cons)は使われていなくて、全部(setq)でdotted pairが作られていると
思うのですが、わざわざ(cons)を使う場合と、(setq)だけでいい場合とはどう違
うのでしょう?


**-***-***-***-***-***-***-***-***-***-***-***-**
           Reiko TAKAHASHI  (高橋玲子)
         E-mail:  HFC03614@...
         ICQ UIN: 85924121  (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**