Elisp符号模式匹配

3

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

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

考虑 (setq x (3 'H))
显然,我们期望输出匹配 "\u2665",但实际上输出匹配到了"\u2660.",即 S。这是怎么回事?我该如何让这个模式匹配语句匹配正确的符号?
感谢您提供的帮助。

1
我在使用 C-h f pcase RET 命令时发现了一些内容,其中提到符号可以匹配任何内容 --- 所以这与我发现的行为是一致的。现在有人能够验证吗? - CodeKingPlusPlus
模式 S 表示“匹配任何内容并将其绑定到变量 S”。为了实现您想要的功能,您需要引用符号 \S,以指示您想要匹配对象 S`。 - Stefan
1个回答

2
您需要使用“QPattern”(请参见C-h f pcase)来匹配特定的符号。以下对我有效:
(let ((x '(3 H)))
  (pcase (cadr x)
    (`S 1)
    (`H 3)
    (_ "error")))
;; => 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接