符号上的elisp模式匹配

时间:2014-08-23 22:09:38

标签: pattern-matching elisp symbols

我在elisp中有以下模式匹配表达式:

 (pcase (cadr x)
        (S "\u2660")
        (D "\u2666")
        (C "\u2663")
        (H "\u2665") 
        (_ "error"))

考虑(setq x (3 'H))

显然,我们希望输出与" \ u2665"匹配,但它匹配" \ u2660。"这是什么S.这里发生了什么?如何获得此模式匹配语句以匹配正确的符号?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要使用“QPattern”(请参阅​​C-h f pcase)来匹配特定符号。这对我有用:

(let ((x '(3 H)))
  (pcase (cadr x)
    (`S 1)
    (`H 3)
    (_ "error")))
;; => 3