como escrever uma função elisp como esta

0

Estou tentando escrever uma função elisp assim:

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

Eu sei que se a primeira string for a mesma que a string da chave, eu posso usar assoc .

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

Eu poderia ativar a função escrevendo o lst separadamente, mas não acho que seja a melhor maneira de fazer isso.

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

Alguém pode me ajudar a escrever a função como foo ?

    
por ironsand 10.11.2015 / 20:02

1 resposta

0

Eu não sou especialista em elisp, mas isso funciona. Ou pergunte sobre emacs.stackexchange .

 (defun foo (ch lst)
   (when lst
     (if (string-match-p ch (car (car lst)))
         (cdr (car lst))
       (foo ch (cdr lst)))))
    
por 10.11.2015 / 21:17

Tags