Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure core.logic match、defne模式匹配构造使用什么语法?_Clojure_Logic Programming_Clojure Core.logic - Fatal编程技术网

Clojure core.logic match、defne模式匹配构造使用什么语法?

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

一些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")
(示例来自)

但我在core.logic文档中找不到模式匹配的语法规范。这是什么语法?也许我可以在一些迷你们卡伦的文档或书籍中找到它

  • 前缀为
    的匹配变量与没有前缀的匹配变量有什么区别
  • 除了带有
    (类似于clojure中的
    &
    )的列表之外,还有其他破坏结构吗
  • [\uu]
    是否只匹配具有两个元素的序列
  • 有可能破坏地图吗

    • 我会尽我所能回答这里的问题。安布罗斯·邦奈尔警官事务所的情报,这是我能找到的唯一有关于这个问题的真实文件的地方。我的怀疑是,很多语法都可以在以
      core.logic
      为基础的研究论文中找到,但由于这些都是270页的论文,我认为它们不会成为很好的参考

      前缀为的匹配变量之间有什么区别?没有它呢?

      前缀为的变量?而不是需要声明为
      fresh
      的参数。在所有其他方面,他们的行为都是一样的

      除了具有的列表之外,是否还有其他破坏结构。(与clojure相似)

      不,没有其他缺失的用于解构的神奇语法

      是否将[\uu]仅匹配具有两个元素的序列?

      是否可以销毁地图?

      不是真的。关于这个主题,你可以阅读一篇很长的文章,但本质上,地图和类似地图的结构在历史上并不是为
      core.logic
      及其同类提供理论基础的解算器关注的主题。如果您对地图上的逻辑求解感兴趣,那么您可以使用的最佳工具可能是。要引用文档,请执行以下操作:

      (featurec x fs)

      确保映射至少包含键值 映射中的对
      fs
      fs
      必须部分实例化,即 可能包含支持功能的逻辑变量值 提取


      扩展到
      (lvar)
      ()。我认为
      ?o
      o
      相比没有什么特别之处
      变量语法在2011年被删除: