如何编写这样的 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)))))

相关内容