elisp pcase谓词模式匹配

时间:2014-10-18 19:29:33

标签: pattern-matching elisp predicate

我想在几个数字范围上进行模式匹配,但似乎elisp不喜欢以下表达式:

(pcase (string-to-char (cadar parse))
  ((pred (and (>= (string-to-char "0")) (<= (string-to-char "5")))) do-something)
  ...

我已经对此进行了测试,它可以在单个范围内正常工作,但是当我开始添加逻辑OR和ANDS时它不起作用,我收到以下错误:

*** Eval error ***  Wrong number of arguments: >=, 1

我认为它可能与OR和AND有关,但是我还没有学会如何使用LISP宏......

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

你混淆了两种and:那里是Elisp表达式的and特殊表格,还有and Pcase的特殊表格图案。因此,不是(pred (and A B))(将测试(and A B <thevalue>)是否返回非零),而是使用(and (pred A) (pred B))来测试(and (A <thevalue>) (B <thevalue>))