Emacs

如何編寫這樣的 elisp 函式

  • November 10, 2015

我正在嘗試編寫這樣的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嗎?

我不是 elisp 專家,但這有效。或者在emacs.stackexchange上詢問。

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

引用自:https://unix.stackexchange.com/questions/242194