一些 core.logic 构造(matcha
, matche
, matchu
, defne
, fne
)使用模式匹配表达式作为主体,可以使用如下:
(run* [q]
(fresh [a o]
(== a [1 2 3 4 5])
(matche [a]
([ [1 2 . [3 4 5] ]]
(== q "first"))
([ [1 2 3 . [4 5] ]]
(== q "second"))
([ [1 . _] ]
(== q "third")))))
;=> ("first"
; "second"
; "third")
(来自Logic-Starter wiki 的示例)
但是我在 core.logic 文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些 minikanren 文档或书籍中找到它?
- 带前缀和不带前缀的匹配变量有什么区别
?
? .
除了带有(类似于&
clojure)的列表之外,还有其他破坏性构造吗?- 将
[_ _]
仅匹配具有两个元素的序列吗? - 可以破坏地图吗?