问题标签 [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.
logic - 合金约束规范
我在 Alloy 中编写了以下代码块:
我想从一组人(s.start)中选择一个“人”并设置一个等于h.from的变量(s'.currentCall)。但是我认为这段代码是在说:s.start 中只有一个人,其中
是真的。我的假设正确吗?我应该如何解决这个问题?
logic-programming - 为什么 DLV 在这个 ASP 示例程序中找到一个答案集而不是另一个答案集?
我在 ASP(答案集编程)中尝试了两个简单的程序,然后我使用答案集求解器 DLV 来找到答案集(也称为稳定模型);这些程序是
P1:
P2:
在 P1 dlv 中找到 {c, b} 作为答案集,在 P2 中找到的答案集是 {f};我不明白为什么答案集在 P1 中是 {c,b},而在 P2 中只有 {f};作为(最小)模型,P1 中的 {c} 还不够吗?
谢谢
prolog - Herbrand 宇宙和最小 Herbrand 模型
我阅读了Herbrand 宇宙中提出的问题,Herbrand Base and Herbrand Model of binary tree (prolog)以及给出的答案,但我有一个稍微不同的问题,更像是一个确认,希望我的困惑能够得到澄清。
令 P 是一个程序,使得我们有以下事实和规则:
从上述程序中,赫布兰德宇宙
赫布兰德基地:
- 现在来回答我的问题(请原谅我的无知),我将 q(a, g(a)) 作为我的 Herbrand 宇宙中的一个元素,但事实上,它声明了 q(a, g(b))。这是否意味着 q(a, g(a)) 不存在?
- 此外,由于 Herbrand 模型是 Herbrand 基础的子集,我如何通过归纳确定最小的 Herbrand 模型?
注意:我对此做了很多研究,有些部分对我来说很清楚,但我仍然有这个疑问,这就是为什么我想征求社区意见的原因。谢谢你。
concurrency - 并发和并行逻辑编程
在序言的艺术的介绍中,Sterling 和 Shapiro 将并行性、并发性和逻辑编程的讨论推迟到另一本书。我的问题是是否有这样的资源:
[the] 并行计算机的承诺,结合逻辑编程模型中似乎可用的并行性,导致了许多尝试,这些尝试仍在进行中,以并行执行 Prolog,并基于逻辑编程计算模型。然而,这是另一本书的主题(序言的艺术,第 xx 页)。
在 Google 上搜索,除了数百篇研究论文和论文之外,我还发现了 Mercury 的 Prolog 和并发库的并行实现。但是在本段的第二部分,关于并发编程和基于逻辑编程语言执行模型的编程语言,很难找到资源。有没有关于这些主题的好资源?我对编译和编写并行和并发逻辑程序的参考资料特别感兴趣。
prolog - 如何在归纳逻辑编程中生成反例?
我试图通过观察使用归纳逻辑编程的人来学习拼图和棋盘游戏的规则。我使用 PROGOL,它是一个用 Prolog 编写的 ILP 程序。虽然对于某些游戏,它能够正确地给我规则,但对于其他一些游戏,由于缺乏反面例子,它不能。
例如,在河内塔谜题中,规则之一是较大的块不会放在较小的块之上。这是一个消极的规则。但是由于在训练期间没有发生此事件,因此没有可以从中学习此规则的明确负面示例。
简而言之,如何在 ILP 中生成负面示例?
logic-programming - 如何限制 Curry 中的搜索空间?
下面是我在 Curry 中的第一个程序。它打印达到所需解决方案所需的步骤序列(穿过关闭的门)。
我怎样才能让它在寻找时终止Impossible
?我正在使用 Kics2 0.3.1。
prolog - 逻辑编程 - 只有一个功能符号图灵的子集 - 完整吗?
如果我有一个只包含一个功能符号的逻辑编程子集,我能做所有事情吗?
我认为我不能,但我完全不确定。如果编程语言是图灵完备的语言,它可以做任何用户想做的事情。我被教导这意味着它必须能够执行 if..then..else 命令、递归和应该定义自然数。
任何帮助和意见将不胜感激!
prolog - Prova 是用 Prolog 编译器还是 Prolog 解释器实现的?
我正在查看 Java 编写的 Prolog 系统 Prova。 https://prova.ws/
但是不清楚它的实现,是Prolog编译器还是Prolog解释器?我阅读了手册,但没有找到答案。
haskell - 隐式定义和尾递归
函数式语言中列表反转函数最直接的定义可能是(使用类似 Haskell 的伪代码)
然而,每个初学的函数式程序员都被教导这种实现效率低下,应该改为编写
高效版本的一个不好的地方是程序员被迫引入了一个意义不是很清楚的辅助函数和参数。我突然想到,如果一种语言允许大致如下的隐式定义,则可能避免这种情况:
这些方程完全确定了 的行为rev
,因此可以说它们构成了它的隐含定义。它们没有引入辅助功能的缺陷rev'
。然而,有一种评估函数的自然方法将是有效的。例如,这是一个合理的归约序列:
我对这种东西的应用范围不太了解,但至少在这个例子中它似乎工作得很好,在我看来,它至少可以在一些类似的情况下工作否则为了提高效率就不得不引入辅助功能。任何人都可以向我指出任何讨论此类内容或支持此类内容的语言的论文吗?对我来说,这有点像逻辑编程,但我对逻辑编程的经验很少。
list - 从序言中的列表中检索答案
您好,我是 Prolog 的初学者,我遇到了以下问题。在这里,我有一个“数据库”,它为我提供有关学校时间表的信息,如下所示:
school(NameOfTeacher,([(Course,Day) ......]).
当问以下问题时
-? find(staff(NameOfTeacher,Course),Day)
答案应该是Day = (the day the course takes place)
。我设法接受了这样的答案Day = (Course,Day)
,但这不是我想要的。有没有人知道如何做到这一点?先感谢您。