Clojure core.logic match、defne模式匹配构造使用什么语法?
一些core.logic结构(Clojure core.logic match、defne模式匹配构造使用什么语法?,clojure,logic-programming,clojure-core.logic,Clojure,Logic Programming,Clojure Core.logic,一些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 "sec
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")
(示例来自)
但我在core.logic文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些迷你们卡伦的文档或书籍中找到它
- 前缀为
的匹配变量与没有前缀的匹配变量有什么区别?
- 除了带有
(类似于clojure中的
)的列表之外,还有其他破坏结构吗&
是否只匹配具有两个元素的序列[\uu]
- 有可能破坏地图吗
- 我会尽我所能回答这里的问题。安布罗斯·邦奈尔警官事务所的情报,这是我能找到的唯一有关于这个问题的真实文件的地方。我的怀疑是,很多语法都可以在以
core.logic
为基础的研究论文中找到,但由于这些都是270页的论文,我认为它们不会成为很好的参考
前缀为的匹配变量之间有什么区别?没有它呢?
前缀为的变量?而不是需要声明为fresh
的参数。在所有其他方面,他们的行为都是一样的
除了具有的列表之外,是否还有其他破坏结构。(与clojure相似)
不,没有其他缺失的用于解构的神奇语法
是否将[\uu]仅匹配具有两个元素的序列?
对
是否可以销毁地图?
不是真的。关于这个主题,你可以阅读一篇很长的文章,但本质上,地图和类似地图的结构在历史上并不是为core.logic
及其同类提供理论基础的解算器关注的主题。如果您对地图上的逻辑求解感兴趣,那么您可以使用的最佳工具可能是。要引用文档,请执行以下操作:
(featurec x fs)
确保映射至少包含键值
映射中的对fs
fs
必须部分实例化,即
可能包含支持功能的逻辑变量值
提取
扩展到(lvar)
()。我认为?o
与o
相比没有什么特别之处?
变量语法在2011年被删除: