深くネストされたリストに埋め込むことができ、決して同じ場所にない特定の値を見つける必要があります。または同じ深さです。リストの 1 つの形式を次に示します。
(setq my-list '(((partnum . 1) (type (TEXT . plain)) (body (charset UTF-8))
(disposition nil) (transfer-encoding QUOTED-PRINTABLE))
((partnum . 2) (type (TEXT . html)) (body (charset UTF-8))
(disposition nil) (transfer-encoding QUOTED-PRINTABLE))))
次に、「charset」の値を取得する必要があります。あるとすれば最初のもの。この構成では、簡単です。
(car (cdr (cadr (third (car my-list)))))
=> UTF-8
しかし、これは「体」細胞がどこにあるかを正確に知っているときです.
次のようにmapcarを再帰的に使用しようとしました:
(defun search-rec (list)
(mapcar
(lambda (x)
(if (listp x)
(search-rec x)
(message "OY %s" x)))
list))
(wrong-type-argument listp 1)
しかし、再帰が最初のコンスセルの最初のアトムにヒットすると、毎回エラーが発生します。私の質問は本当にそれが何であるかだと思います:
リストを検索するにはどうすればよいですか?
編集リストは次のようになり、「charset」はまだ(本体)にあり(それが唯一の定数であると言いました)、もはや見つかりません:(
(setq my-list '(((partnum . 1)
(1.1 (type (TEXT . plain)) (body (charset UTF-8))
(disposition nil) (transfer-encoding 7BIT))
(1.2 (type (TEXT . html)) (body (charset UTF-8))
(disposition nil) (transfer-encoding 7BIT))
(type . alternative) (body (boundary e89a8fb2067eba300404c63c5f7f))
(disposition nil) (transfer-encoding nil))
((partnum . 1.1) (type (TEXT . plain)) (body (charset UTF-8))
(disposition nil) (transfer-encoding 7BIT))
((partnum . 1.2) (type (TEXT . html)) (body (charset UTF-8))
(disposition nil) (transfer-encoding 7BIT))
((partnum . 2) (type (IMAGE . x-xpixmap)) (body (name ladybug.xpm))
(disposition nil) (transfer-encoding BASE64))))
ここで編集して、IRL の例をいくつか示します。
(setq my-list haystack-list)
(setq my-needle (tree-assoc 'charset my-list))
(message "
-------------\n
- my-list: %s\n
- my-needle: %s\n
-------------\n" my-list my-needle)
プロデュース:
my-list: ((TEXT plain (charset UTF-8) nil nil 7BIT 260 18 nil nil nil) (TEXT html (charset UTF-8) nil nil QUOTED-PRINTABLE 738 17 nil nil nil) 代替 (境界 e89a8fb1f8061a6be404c70a24a0) nil nil )
私の針:nil
一方、次の場合:
(tree-assoc 'charset '((TEXT plain (charset UTF-8) nil nil 7BIT 260 18 nil nil nil)
(TEXT html (charset UTF-8) nil nil QUOTED-PRINTABLE 738 17 nil nil nil)
alternative (boundary e89a8fb1f8061a6be404c70a24a0) nil nil))
=>(charset UTF-8)
本当に、ここで何が起こっているのかわかりません。「この干し草の山リストは何ですか?」しかし、それは関連していますか?私はこの haystack-list のコピー (my-list) に取り組んでいるので、何が異なる結果をもたらすのでしょうか? リストの引用?みんな、私は本当に迷っています
NB (この動作 (直接評価では機能しますが、defun/let プロダクションの状況では機能しません) は、与えられたすべてのソリューションで発生しました)
編集:最初に見つかったリストを抽出し、そのリストから(検索ではなく)要素を抽出しました。私はより速く証明しました。もちろん、これは「私の要素は常に見つかった最初のリストにある」と言えるときです; みんなのおかげで、私はこれらすべてを通して多くのことを学びました.