이와 같은 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)))))

관련 정보