2009-11-02 3 views
22

これはおそらく愚かですが、引用や評価に関して何が起こっているかを理解するのに十分なElispの知識はありません。Emacs Lisp:alistの変数を評価してください

私はこのelispのコードがあるとします。

(add-to-list 'default-frame-alist '(width . 100)) 
(add-to-list 'default-frame-alist '(height . 50)) 

それは期待デフォルトフレーム-alistの値になります:

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist '(width . my-frame-width)) 
(add-to-list 'default-frame-alist '(height . my-frame-height)) 
:私はこれを持っている場合

((height 50) 
(width 100)) 

しかし、今

-

((height my-frame-height) 
(width my-frame-width)) 

フレームのジオメトリから判断すると、これらの変数は決して評価されません。このフレームワークでは、フレームの幅と高さの実際の値をどのように表示させるのですか?私は引用符が多すぎますか?しかし、私は

答えて

28

はこれを試してみてください...アドオンのリストの評価からいずれかを削除することはできません。

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist `(width . ,my-frame-width)) 
(add-to-list 'default-frame-alist `(height . ,my-frame-height)) 

パラメータの評価を強制するために、あなたが使用することを可能にする代わりに、引用符のバッククォートを使用します。

Elispリファレンスマニュアルを参照してください。 C-x infoと入力し、elispリファレンスマニュアルを検索し、その中のバッククォートを検索してください。

+0

私が探していたもの、感謝!このような質問は、elispを系統的に学ぶのに時間がかかるべきことを私に思い出させる。 –

+0

類似の問題については、[alistの変数をEmacs lispで評価する](http://stackoverflow.com/questions/15485833/emacs-lisp-evaluate-variable-in-alist)も参照してください。 –

+3

私は直感的なバッククォートとカンマのこと。 – Cheeso

11

mchの答えの逆引用符演算子の代わりに、cons関数を使用できます。この関数は、最初の引数をcar、2番目の引数をcdrとしてコンスセルを構築します。あなたのコードの点線の表記法は、これを簡略化したものです。だから私たちはあなたのコードをこのように書き換えることができます:

(setq my-frame-width 100) 
(setq my-frame-height 50) 
(add-to-list 'default-frame-alist (cons 'width my-frame-width)) 
(add-to-list 'default-frame-alist (cons 'height my-frame-height)) 

この方法は、あなたが(幅と高さのような)あなたは、文字通り表示する記号を引用し、私のフレーム幅などの値を持つあなたは(必要なシンボルを評価することができます私のフレーム高さ)。私はこの方法がより単純であるので好きです。しかし、それは確かに意見の問題です。今後参考になるようにいくつかあります。information on cons and list

関連する問題