このような elisp 関数を書く方法

このような elisp 関数を書く方法

elisp次の関数を作成しようとしています。

(setq lst '(("abc" . "c") ("cde" . "f")))
(foo "a" lst) ;=>"c"
(foo "b" lst) ;=>"c"
(foo "c" lst) ;=>"c"
(foo "d" lst) ;=>"f"

最初の文字列が私が使用できるキー文字列と同じかどうかを知っていますassoc

(setq lst '(("a" . "c") ("d" . "f")))
(cdr (assoc "a" lst)) ;= "c"
(cdr (assoc "d" lst)) ;= "f"

個別に作成して機能を有効にすることもできますが、lstこれが最善のアプローチではないと思います。

(setq lst '(("a" . "c") ("b" . "c") ("c" . "c")
            ("c" . "f") ("d" . "f") ("f" . "f")
            ))

誰かがそのような関数を書く方法を助けることができますかfoo

答え1

私はelispの専門家ではありませんが、これはうまくいきます。または尋ねるemacs.stackexchange

 (defun foo (ch lst)
   (when lst
     (if (string-match-p ch (car (car lst)))
         (cdr (car lst))
       (foo ch (cdr lst)))))

関連情報