问题标签 [prolog-dif]

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 回答
873 浏览

prolog - 存在时prolog没有给我一个解决方案

我正在七周内完成七种语言,但是我对 prolog 有一些不明白的地方。我有以下程序(基于他们的 wallace 和 grommit 程序):

并像这样加载它

但它没有给我以下任何解决方案

它可以解决更简单的问题(如书中所示):

并且有解决方案:

我错过了什么?我已经尝试过使用 gnu prolog 和 swipl。

...还有更多...

当您将“不能成为自己的队友”限制移动到然后结束时:

它给了我我期望的解决方案:

是什么赋予了?

0 投票
1 回答
485 浏览

prolog - 图中从 X 到 Y 的两条不同路径

我被以下 Prolog 问题所困扰:给定没有循环作为事实的图的边缘。例如:

我必须编写一个谓词来测试顶点 X 和 Y 之间是否有两条不同的路径。例如,two_paths(a, c).如果从节点 a 到节点 c 有两条不同的路径,则调用应该返回 true。我知道如何检查两个顶点之间是否有路径:

但是我应该如何检查两条不同的路径呢?非常感谢您的帮助。

0 投票
2 回答
488 浏览

prolog - 实现诸如 dif/2 之类的谓词的指南

假设我有一个谓词foo/2,它定义了它的第一个和第二个参数之间的关系。

什么是最惯用和最有效的方法来改变这样的实现foo/2

  • 如果它的两个论点都成立,它就像以前一样(如果关系成立则成功,否则失败)。

  • 如果两个参数之一(或两者)是自由的,它会“约束”这两个参数,以便当它们接地时,将检查关系。

换句话说,如何正确实现dif/2任何类型的用户定义关系所表现出的行为?

listing(dif/2).帮助不大。

0 投票
1 回答
237 浏览

prolog - 如何表达 allDifferent/6 谓词?

allDifferent(A, B, C, D, E, F)当且仅当 ∀ i , j在 {1, 2, 3, 4, 5, 6} 中,第i个和第j个参数统一当且仅当 i = j时为

因此allDifferent(3, 1, 4, 1, 5, 9)是假的,但却allDifferent(3, 1, 4, 2, 5, 9)是真的。

如何allDifferent/6在 Prolog 中实现?

特别是,有没有一种不需要列出 6-choose-2 = 15 个不等式ABAC、...、EF(或者,更确切地说,是它们的 Prolog 演绎)的方式来表达它?

0 投票
1 回答
175 浏览

prolog - 无法在 Prolog 中显示第二个答案

我不知道我的代码中发生了什么。当我输入

序言说的是真的。但是当我进入

序言说S = william但没有告诉我S = betty。我真的不知道发生了什么。需要帮忙。

这是我得到的序言结果。

0 投票
4 回答
671 浏览

list - Prolog:搜索列表中的两个元素是否同样出现

我是 Prolog 的新手,不是母语人士,所以如果你不理解我,我很抱歉。

我的问题是我怎样才能找到一个列表是否ab从一个列表中出现相同?

例如,[a,a,b,b]应该给我true,但如果其中一个出现的次数多于另一个,它应该给false。例如:[a,a,a,b,b]

任何人都可以帮助我吗?这是我到目前为止所拥有的,我知道这是错误的,但我正在尝试。

0 投票
2 回答
91 浏览

prolog - Prolog,关于如何形成更好的从句

我有以下条款:

当我输入查询时:

它只返回:

这就是我想要的。

但是当我输入这个查询时:

它只返回:

那么如何修改子句使其返回:

谢谢

0 投票
6 回答
1731 浏览

list - 字符串列表的最长公共前缀 (LCP)

到目前为止,这是我的代码。我该如何优化它以便打印前缀,例如:

应该返回"inte"

Prolog 有点生疏,有一段时间没做过了:)

0 投票
2 回答
173 浏览

list - 如何实现 not_all_equal/1 谓词

如何实现一个not_all_equal/1谓词,如果给定列表包含至少 2 个不同的元素,则该谓词成功,否则失败?

这是我的尝试(不是很纯粹的尝试):

然而,这并不总是具有最佳行为:

在这个例子中,只有第一个答案应该出来,另外两个是多余的。

0 投票
1 回答
270 浏览

prolog - Prolog中的平等和统一我错过了什么?

我正在通过 Clocksin 和 Mellish 尝试并最终超越仅仅涉足 Prolog。FWIW,我正在运行 SWI-Prolog:

适用于 x86_64-linux 的 SWI-Prolog 版本 7.2.3

无论如何,我在练习 1.4 中实现了一个 diff/2 谓词。谓词非常简单:

它在用于 Sister_of 谓词时有效,如下所示:

在那,假设必要的附加事实,这样做:

按预期返回 false。但这就是问题所在。如果我这样做:

(再次,考虑到必要的额外事实)我得到

谁=爱德华;

谁=爱丽丝;

错误的

尽管如前所述,sister_of 谓词并不将 alice 视为她自己的妹妹。

另一方面,如果我使用 SWI 提供的 dif/2 谓词,那么一切都会按照我天真期望的方式进行。

谁能解释为什么会这样,以及为什么我的 diff 实现不能按我预期的方式工作,在我要求从该查询中进行额外统一的情况下?

我正在使用的整个源文件可以在这里找到

任何帮助深表感谢。