问题标签 [logic-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2678 浏览

lua - Lua中的逻辑编程?

有没有办法 在 Lua 中进行逻辑编程(想想 Prolog)?

特别是:是否有任何用于逻辑编程的 Lua 模块(miniKanren实现将是最好的,但不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知(最好尝试过)的方法如何在 Lua 中进行逻辑编程?

另外:有没有人尝试过在 Lua 中进行逻辑编程之类的事情?


[1] 到目前为止,我发现只有一篇博文提到了用 Metalua 编写一篇文章的可能性,但我更愿意看到一篇与标准 Lua 兼容的文章。

0 投票
1 回答
229 浏览

database - 什么是clojure中逻辑编程的良好/成熟的数据库支持策略

我很难找到有关使用诸如core.logic 之类的逻辑编程方法为要查询的事实建立(演绎)数据库的策略的深刻信息。可以找到的大多数示例都处理在内存中创建的事实。

一个非常好的图书馆是Cascalog。它位于 hadoop 之上,并使用受数据日志启发的漂亮直观的查询语言抽象出 map-reduce。

但是 Cascalog 只是 hadoop,我想知道是否有类似的 clojure 解决方案可以与其他类型的数据库很好地配合,无论是 nosql 还是关系(演绎数据库)。

0 投票
1 回答
321 浏览

logic-programming - Maude 语言的社区资源

学习莫德语言时,我该去哪里寻求互动帮助?

我找到了具有出色指导的书籍、教程和网页。我找不到任何类型的交互,例如 IRC 频道、活动邮件列表或堆栈交换(有这样的列表,但它每月收到一两条消息。)

这种语言还有哪些其他人际资源?

0 投票
2 回答
1268 浏览

clojure - Core.logic的简明解释

我想使用 Clojure 的 Core.logic。但是,我也想了解它是如何工作的。在某处是否有简明的解释?(比如实现一个元循环评估器?)

谢谢!

0 投票
1 回答
241 浏览

constraints - Eclipse 约束编程 - 搜索/6

我无法理解eclipse 约束编程框架中的 search/6 函数文档。

我知道选择参数基本上会影响值排序。

选择方法似乎也选择了变量排序,但我并不完全理解它的所有选项。

我不太了解其他参数,所以我想知道是否有人可以用语言解释它们。我对约束逻辑编程的理论有很好的理解,所以请随意参考这些概念。我只是不明白该文档中的很多 CS 术语(arity 等)

谢谢

0 投票
3 回答
1102 浏览

scala - Scala中的基本逻辑编程

我有一个有趣的小问题,我遇到了这样的逻辑子句:

现在(假设我刚刚提出的这个快速示例实际上验证了:P),很容易看到

但这是一个非常人为的例子。

如果你有 20 条(或 1 万条)规则,并且它们重叠了怎么办。假设有一个有效的单一答案,并且您可以以某种方式访问​​规则(例如谓词列表)。

有没有一个很好的、通用的、直观的解决方案?我知道 Prolog 可以使用某些库来解决它,但我的尝试证明是徒劳的。我知道我可以蛮力排列范围内的所有数字,然后手动检查它们是否符合规则。但这似乎很蹩脚。

0 投票
3 回答
230 浏览

prolog - Prolog 中回溯期间的状态传播

假设我在 Prolog 中有一个简单的程序,它正在搜索某个状态空间:

我知道:

  • generate(State, NewState)NewState正在为任何给定的生产至少一个State
  • 整个状态空间是有限的

我想修改search谓词以确保它始终能够在有限时间内进行检查。所以我写了类似的东西:

这是有效的,但它在回溯期间丢失了计算状态,所以现在我有一个空间大小最大高度的搜索树。

有没有办法在回溯期间传播状态而不会丢失任何计算信息?我想要一个带有 O(space_size) 节点的整个搜索树。可能吗?

编辑: 似乎我应该使用它assert/[1,2]来动态创建将用作全局内存的新子句。

0 投票
2 回答
97 浏览

graphics - 使用 generatedInitialize() 教程

最近有人告诉我 prolog 可以创建图形显示,并通过使用谓词generatedInitialize().

我可以要求一些教程吗?

例如,如何显示一个矩形?

我正在使用 Win-Prolog 4.920。

0 投票
1 回答
315 浏览

haskell - 如何找到最优的加工顺序?

我有一个有趣的问题,但我不确定如何表达它......

考虑 lambda 演算。对于给定的 lambda 表达式,有几种可能的归约顺序。但其中一些不会终止,而另一些会终止。

在 lambda 演算中,事实证明存在一个特定的归约顺序,如果确实存在一个不可约解,则它保证总是以不可约解结束。它被称为正常订单。

我写了一个简单的逻辑求解器。但问题是,它处理约束的顺序似乎对它是否找到任何解决方案有巨大的影响。基本上,我想知道我的逻辑编程语言是否存在类似正常顺序的东西。(或者仅仅是一台机器不可能确定性地解决这个问题。)


所以这就是我所追求的。据推测,答案主要取决于“简单逻辑求解器”究竟是什么。因此,我将尝试简要描述它。

我的程序非常基于The Fun of Programming (Jeremy Gibbons & Oege de Moor) 第 9 章中的组合器系统。该语言具有以下结构:

  • 求解器的输入是单个谓词。谓词可能涉及变量。求解器的输出是零个或多个。解决方案是一组使谓词变为真的变量赋值。

  • 变量包含表达式。表达式是整数、变量名或子表达式的元组。

  • 有一个相等谓词,它比较表达式(不是谓词)是否相等。如果用它的值替换每个(绑定的)变量使两个表达式相同,则满足。(特别是,每个变量都等于它自己,无论是否绑定。)这个谓词是使用统一来解决的。

  • 还有用于 AND 和 OR 的运算符,它们以明显的方式工作。没有 NOT 运算符。

  • 有一个“存在”运算符,它本质上是创建局部变量。

  • 定义命名谓词的工具支持递归循环。

关于逻辑编程的“有趣的事情”之一是,一旦你编写了一个命名谓词,它通常会向前和向后工作(有时甚至是横向工作)。典型示例:连接两个列表的谓词也可用于将列表拆分为所有可能的对。

但有时向后运行谓词会导致无限搜索,除非您重新排列术语的顺序。(例如,交换 AND 或 OR somehwere 的 LHS 和 RHS。)我想知道是否有一些自动方法来检测运行谓词的最佳顺序,以确保在解决方案集完全正确的所有情况下立即终止有限。

有什么建议么?

0 投票
1 回答
181 浏览

logic-programming - 将 Maude 表达式转换为字符串

有没有办法将 Maude 表达式转换为字符串?

我正在寻找相当于 Haskell 的show.