我想在几个数字范围上进行模式匹配,但似乎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宏......
感谢您的帮助!
答案 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>))
。