问题标签 [prolog]

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 投票
2 回答
3446 浏览

prolog - Prolog 中的简单图形搜索

我正在尝试在 SWI-Prolog 中编写一个简单的图形搜索。我想出了以下程序:

但是这个程序会导致堆栈溢出。我做错了什么,如何解决?

0 投票
2 回答
356 浏览

prolog - Prolog 方言 Prova 的文档

我想从 SWI-Prolog 切换到Prova——但这似乎比预期的要难:

谓词 likesucc()不可用并且操作 likeVar1+Var2>Var3不起作用(显然它必须Var3<Var1+Var2是有效的)。

是否有描述 Prolog 方言之间差异的文档?

0 投票
1 回答
293 浏览

conditional - Prolog条件不评估

我试图简单地在序言中做一个这样的条件:

((生命==死亡)->反式=否)。

我认为上面的代码会评估为好像 Life == dead,然后 Trans = no,但由于某种原因它不是?谢谢。

0 投票
3 回答
975 浏览

prolog - 将列表作为一个不带括号的元素推送到 Stack

我有一个列表中的元素列表[1,2,+],我想将它们作为一个元素推送到堆栈上。我可以通过将它们放在方括号之间来做到这一点,但这会使括号出现在输出中。例如,我想将列表 [1,2,+] 的元素推入堆栈:

在哪里stack

问题是,如果我将更多表达式压入堆栈,它们将有嵌套的括号。例如,我会得到[[+,1,2],[*,3,4]],但我想要[+,1,2,*,3,4]。我怎样才能做到这一点?

0 投票
2 回答
265 浏览

list - Prolog 对齐谓词

对齐是指谓词包含两个列表,其中三个带有对齐列表。然后检查对齐列表中的每个项目确实是其他两个灯中的一个元素。并且有关于顺序的要求,因此排除了仅检查对齐列表中的每个项目是否是其他两个输入灯的成员。如果我只检查成员,则有效的对齐方式在反转时也是有效的。这当然是错的。

8,2 和 8,9 在这里无效。

当我想到如何实际检查顺序时,我的脑袋又回到了命令式语言编程中。非常感谢任何输入。但是不要直接给出答案,我想要关于我应该阅读的内容的提示。(我需要这么说,因为我在这个站点上得到了很好的帮助,如果我不指出这一点,它就太接近作弊了)。

我的想法是 I 或 prolog 需要在其当前元素的索引之后继续搜索。那会使反向对齐无效吗?

编辑:在两个列表中当前元素的索引之后,它必须继续搜索。如上例,当它找到 2 时,它开始在索引 2 和索引 5 处搜索下一个元素。(第一个元素为 1)

0 投票
6 回答
6489 浏览

list - 如何在列表列表中找到最长的列表?

我有一个列表列表,我需要找到其中最长的一个。如果有多个长度相同,则返回的相同。谢谢。

0 投票
2 回答
214 浏览

list - 组合独立工作的谓词的 Prolog 问题

我们走吧,忍受我。总体目标是返回两个列表之间的最大对齐。如果有多个具有相同长度的对齐,它可以只返回第一个。

对齐是指两个列表共享的元素,按正确的顺序但不一定按顺序。1,2,3 和 1,2,9,3;这里 1,2,3 将是最长的对齐方式。任何知道我已经定义的谓词的人。

然后我使用内置谓词 findall 来获取这些列表之间所有对齐的列表?在这种情况下,它将最大的对齐放在第一位,但我不知道为什么。

这将返回以下内容;

这是正确的,但是现在我需要一个谓词来结合这两者并返回列表列表中的最大列表。

0 投票
4 回答
486 浏览

prolog - Prolog 路径搜索指针

我需要检查路径是否有效、真或假。它是这样给出的:

在列表部分,如何访问 (a,c) 中的 a 或 c?它像字符串“(a,c)”吗?

一般来说,如何解决这种类型的寻路问题?示例代码/伪表示赞赏。有没有办法让它将列表中的元组 () 解释为谓词?

0 投票
3 回答
8203 浏览

loops - Prolog循环通过可变结果

我有一个用 Prolog 编写的小程序。目前我可以打印第一个结果

但是如果 X 有多个结果,我如何打印下一个?

谢谢。

0 投票
5 回答
3531 浏览

prolog - prolog 子句定义的最大值

我知道如何遍历 Prolog 中的列表以找到最大值,但是如果每件事都是一个单独的子句怎么办?例如,如果我有一群猫科动物和它们的年龄,我将如何找到最古老的小猫?

我的第一个想法是“嗯,最老的猫是没有更老的猫”。但我不能很好地翻译成序言。

这仍然错误地匹配“朦胧”。这样做的正确方法是什么?有没有办法更直接地迭代年龄来选择最大值?