问题标签 [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.
lua - Lua中的逻辑编程?
有没有办法 在 Lua 中进行逻辑编程(想想 Prolog)?
特别是:是否有任何用于逻辑编程的 Lua 模块(miniKanren实现将是最好的,但不是严格要求)?因为我找不到任何[1]。如果没有,是否有任何已知(最好尝试过)的方法如何在 Lua 中进行逻辑编程?
另外:有没有人尝试过在 Lua 中进行逻辑编程之类的事情?
[1] 到目前为止,我发现只有一篇博文提到了用 Metalua 编写一篇文章的可能性,但我更愿意看到一篇与标准 Lua 兼容的文章。
database - 什么是clojure中逻辑编程的良好/成熟的数据库支持策略
我很难找到有关使用诸如core.logic 之类的逻辑编程方法为要查询的事实建立(演绎)数据库的策略的深刻信息。可以找到的大多数示例都处理在内存中创建的事实。
一个非常好的图书馆是Cascalog。它位于 hadoop 之上,并使用受数据日志启发的漂亮直观的查询语言抽象出 map-reduce。
但是 Cascalog 只是 hadoop,我想知道是否有类似的 clojure 解决方案可以与其他类型的数据库很好地配合,无论是 nosql 还是关系(演绎数据库)。
clojure - Core.logic的简明解释
我想使用 Clojure 的 Core.logic。但是,我也想了解它是如何工作的。在某处是否有简明的解释?(比如实现一个元循环评估器?)
谢谢!
constraints - Eclipse 约束编程 - 搜索/6
我无法理解eclipse 约束编程框架中的 search/6 函数的文档。
我知道选择参数基本上会影响值排序。
选择方法似乎也选择了变量排序,但我并不完全理解它的所有选项。
我不太了解其他参数,所以我想知道是否有人可以用语言解释它们。我对约束逻辑编程的理论有很好的理解,所以请随意参考这些概念。我只是不明白该文档中的很多 CS 术语(arity 等)
谢谢
scala - Scala中的基本逻辑编程
我有一个有趣的小问题,我遇到了这样的逻辑子句:
现在(假设我刚刚提出的这个快速示例实际上验证了:P),很容易看到
但这是一个非常人为的例子。
如果你有 20 条(或 1 万条)规则,并且它们重叠了怎么办。假设有一个有效的单一答案,并且您可以以某种方式访问规则(例如谓词列表)。
有没有一个很好的、通用的、直观的解决方案?我知道 Prolog 可以使用某些库来解决它,但我的尝试证明是徒劳的。我知道我可以蛮力排列范围内的所有数字,然后手动检查它们是否符合规则。但这似乎很蹩脚。
prolog - Prolog 中回溯期间的状态传播
假设我在 Prolog 中有一个简单的程序,它正在搜索某个状态空间:
我知道:
generate(State, NewState)
NewState
正在为任何给定的生产至少一个State
- 整个状态空间是有限的
我想修改search
谓词以确保它始终能够在有限时间内进行检查。所以我写了类似的东西:
这是有效的,但它在回溯期间丢失了计算状态,所以现在我有一个空间大小最大高度的搜索树。
有没有办法在回溯期间传播状态而不会丢失任何计算信息?我想要一个带有 O(space_size) 节点的整个搜索树。可能吗?
编辑:
似乎我应该使用它assert/[1,2]
来动态创建将用作全局内存的新子句。
graphics - 使用 generatedInitialize() 教程
最近有人告诉我 prolog 可以创建图形显示,并通过使用谓词generatedInitialize()
.
我可以要求一些教程吗?
例如,如何显示一个矩形?
我正在使用 Win-Prolog 4.920。
haskell - 如何找到最优的加工顺序?
我有一个有趣的问题,但我不确定如何表达它......
考虑 lambda 演算。对于给定的 lambda 表达式,有几种可能的归约顺序。但其中一些不会终止,而另一些会终止。
在 lambda 演算中,事实证明存在一个特定的归约顺序,如果确实存在一个不可约解,则它保证总是以不可约解结束。它被称为正常订单。
我写了一个简单的逻辑求解器。但问题是,它处理约束的顺序似乎对它是否找到任何解决方案有巨大的影响。基本上,我想知道我的逻辑编程语言是否存在类似正常顺序的东西。(或者仅仅是一台机器不可能确定性地解决这个问题。)
所以这就是我所追求的。据推测,答案主要取决于“简单逻辑求解器”究竟是什么。因此,我将尝试简要描述它。
我的程序非常基于The Fun of Programming (Jeremy Gibbons & Oege de Moor) 第 9 章中的组合器系统。该语言具有以下结构:
求解器的输入是单个谓词。谓词可能涉及变量。求解器的输出是零个或多个解。解决方案是一组使谓词变为真的变量赋值。
变量包含表达式。表达式是整数、变量名或子表达式的元组。
有一个相等谓词,它比较表达式(不是谓词)是否相等。如果用它的值替换每个(绑定的)变量使两个表达式相同,则满足。(特别是,每个变量都等于它自己,无论是否绑定。)这个谓词是使用统一来解决的。
还有用于 AND 和 OR 的运算符,它们以明显的方式工作。没有 NOT 运算符。
有一个“存在”运算符,它本质上是创建局部变量。
定义命名谓词的工具支持递归循环。
关于逻辑编程的“有趣的事情”之一是,一旦你编写了一个命名谓词,它通常会向前和向后工作(有时甚至是横向工作)。典型示例:连接两个列表的谓词也可用于将列表拆分为所有可能的对。
但有时向后运行谓词会导致无限搜索,除非您重新排列术语的顺序。(例如,交换 AND 或 OR somehwere 的 LHS 和 RHS。)我想知道是否有一些自动方法来检测运行谓词的最佳顺序,以确保在解决方案集完全正确的所有情况下立即终止有限。
有什么建议么?
logic-programming - 将 Maude 表达式转换为字符串
有没有办法将 Maude 表达式转换为字符串?
我正在寻找相当于 Haskell 的show
.