3
2つのプロパティリストをマージする関数?
次のように、2つのプロパティリストをマージする標準のElispライブラリ関数が見つかりません。 (setq pl nil) (setq pl (plist-put pl 'key-1 'value-1)) (setq pl (plist-put pl 'key-2 'value-2)) で何かを構築できますがdolist、その前に、ライブラリの既存の関数を見落としていないことを確認したいと思います。 コメントに基づく更新: 「多方向」コメントへの応答: 私はそのような関数は存在しないと想像します。異なる(そして有効な)可能性のある質問に対する回答が存在するためです。異なる値を持つ重複したプロパティ名がある場合はどうすればよいですか? はい、重複をマージする方法についての質問がありますが、それに対処する方法は比較的少数です。一般的なアプローチは2つあります。まず、引数の順序で重複を解決できます。たとえば、Clojureのマージのように、右端の勝利。第2に、Rubyのmergeの場合と同様に、マージはユーザー指定のコールバック関数に委任できます。 いずれにせよ、さまざまな方法があるという事実は、他の多くの言語標準ライブラリがマージ機能を提供することを妨げません。同じ一般的な議論はソートについても言えますが、Elispはソート機能を提供します。 「詳しく説明していただけませんか?」/「探している動作を正確に指定してください。」 一般的に言って、私はElispコミュニティーが使用するものにオープンです。特定の例が必要な場合は、次の例が機能します。 (a-merge-function '(k1 1) '(k2 2 k3 3) '(k3 0)) そして戻る '(k1 1 k2 2 k3 0)) これは、Clojureのマージのように、最も右勝者のスタイルになります。 「それらはリストなので、追加するだけですか?」 いいえ、プロパティリストのセマンティクスappendは保持されません。この: (append '(k1 1 k2 2) '(k2 0)) …