6

Lisp のコードとデータに対する「すべてがリスト」のホモイコニックなアプローチを考えると、Emacs Lisp で連想リストを操作する方法を理解するのに苦労しています。特に、連想リストを 2 要素リストの通常のリストに変換するにはどうすればよいでしょうか。連想リストは、通常のリストのように操作できない独自の特殊なタイプのようです。

.emacs具体的な例: 次のように、ファイル内のキーをバインドして、プログラムで生成された名前を持つ特定のサイズのフレームを作成しようとしています。

(make-frame '((name . "Blarg") (width . 80) (height . 24)))

これは、「Blarg」が定数文字列である限り問題なく機能しますが、連想リストの先頭に引用符があるため、「Blarg」の代わりに文字列として評価されるコードを配置できません。私がやりたいことはcons、幅と高さの記号と整数を ing してリストを作成し、次にadd-list名前を前に置き、すべてを に渡すことmake-frameです。しかし、結果のデータ構造を連想リストに変換するにはどうすればよいでしょうか?

もちろん、私がやりたいことを実行する方法についての具体的な回答はmake-frame大歓迎ですが、私のタイトルが示すように、連想リストを操作して通常のリストとの間で変換する方法のより一般的な説明を望んでいます。

4

4 に答える 4

6

連想リストの構築に関する私の 2 セント:

(pairlis '(name width height)
         '("Blarg" 80 24))
;; => ((name . "Blarg") (width . 80) (height . 24))
于 2013-11-04T19:20:46.337 に答える
5

@wvxvw が一般的な質問に回答しました。ただし、記述されているのは、連想リストをリストに、またはその逆に変換することではないことに注意してください。

一般に、そのような「変換」を行う必要はありません。代わりに連想リストを直接操作することもできます。結局のところ、連想リストはリストです。

これはあなたのmake-frame質問への答えに私をもたらします。これは、foobarあなたが望む名前を保持している場所です:

(make-frame `((name . ,foobar) (width . 80) (height . 24)))

または、必要に応じて:

(make-frame (cons (cons 'name foobar) '((width . 80) (height . 24))))
于 2013-11-04T19:25:07.857 に答える