问题标签 [prolog-toplevel]

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 投票
1 回答
67 浏览

prolog - 在 Prolog 为什么这个查询返回这个特定的结果

这个查询的效果是什么,为什么它会返回这个特定的结果?

0 投票
2 回答
2347 浏览

prolog - 在 SICStus Prolog / SWI-Prolog REPL 中定义谓词

我正在阅读http://cs.union.edu/~striegnk/learn-prolog-now/html/node3.html#subsec.l1.kb1,但在运行以下谓词时遇到问题:

另一方面,如果我将它写入文件并运行查询文件,它似乎工作正常......

我是否只允许在稍后查阅它们的文件中定义谓词?我不能只在编辑器中做吗?

0 投票
1 回答
719 浏览

prolog - 学习prolog练习2.3

我正在通过学​​习序言网站尝试学习一些序言并试图理解练习 2.3。我猜对 word() 的每次调用都会进入某种堆栈左右,这可以解释为什么它似乎将单词从结尾改回开头。但是,如果将其中一个词稍微调高一点,它怎么会再次回落呢?

像:

一个罪犯吃掉一个罪犯

一个罪犯吃了一个大卡胡纳汉堡

一个罪犯吃掉每个 罪犯

一个罪犯吃掉 一个大卡胡纳汉堡

然后一个 swi-prolog 问题是否有可能让它说是/否而不是真/假?

最好的问候安德斯奥尔梅

0 投票
5 回答
25600 浏览

swi-prolog - SWI-Prolog - 显示长列表

我正在使用 SWI-Prolog 并且我正在尝试打印一个列表,但如果该列表有超过 9 个项目 - 它看起来像这样 -

有没有办法显示整个列表?

0 投票
3 回答
126 浏览

list - 如何使用地面/1?

我是 Prolog 的初学者,我想知道如何使用ground/1.

目前我有这个代码:

但是当我尝试在 shell 中调用它时:

我得到了正确的答案X=[a,b],但查询并没有结束,好像它认为还有另一个答案。所以,我按“;” 我得到“假”作为输出。我读了另一个问题的答案,我应该用它ground/1 来检查第三个列表是否已经完全实例化来处理这个案例。

问题是,作为一个完整的初学者,我不知道该怎么做。那么有没有人好心地向我解释 ground 是如何工作的,以及我如何使用它来检查特定参数的实例化并使用它来不让代码检查不存在的答案?

0 投票
2 回答
433 浏览

prolog - 如何处理序言列表?

我有谓词m(L,L),我希望它返回它需要的列表。代码是这样的:

当我尝试在这个例子中使用它时:

我得到这个答案:

(我注意到如果我尝试使用较少的元素就可以了。)为什么会发生这种情况并且列表未完成?

我怎样才能避免这种情况?

抱歉,如果这是一个非常愚蠢的问题,但是我已经在网上搜索过,但找不到任何可以帮助我理解的文档...谢谢!

0 投票
1 回答
108 浏览

prolog - 修改 SWI-Prolg 顶层

是否可以对 SWI Prolog 的顶层进行修改?

0 投票
3 回答
2119 浏览

prolog - 使用手动列表迭代与失败递归的优缺点是什么

我一直遇到这种情况,我永远不知道用哪种方法来攻击它。以下是处理某些季节事实的两种方法。

我正在努力解决的是使用方法1还是2,以及每种方法的优缺点,尤其是大量的事实。

methodone似乎很浪费,因为事实是可用的,为什么还要建立一个列表(尤其是一个大列表)。如果列表足够大,这也一定会影响内存?而且它没有利用 Prolog 的自然回溯功能。

methodtwo利用回溯为我进行递归,我想内存效率会更高,但是通常这样做是一种好的编程习惯吗?可以说它更丑陋,可能还有其他副作用吗?

我可以看到的一个问题是,每次fail调用时,我们都失去了将任何东西传递回调用谓词的能力,例如。如果是methodtwo(SeasonResults),因为我们不断地故意使谓词失败。所以methodtwo需要断言事实来存储状态。

大概(?)方法2会更快,因为它没有(大)列表处理要做?

我可以想象,如果我有一个清单,那methodone将是要走的路……还是总是如此?methodone在任何情况下使用方法二将列表断言为事实然后处理它们是否有意义?彻底的疯狂?

但是话又说回来,我读到断言事实是一项非常“昂贵”的业务,因此即使对于大型列表,列表处理也可能是要走的路?

有什么想法吗?或者有时根据(什么)情况使用一个而不是另一个更好?例如。对于内存优化,使用方法 2,包括断言事实,对于速度使用方法 1?

0 投票
2 回答
1463 浏览

prolog - prolog 函数返回内存位置而不是值

刚开始用 prolog 编程,我遇到了一些问题。我拥有的函数应该取一个值 X 并将其 N 次复制到 M 中。我的函数返回 N 个内存位置的列表。这是代码,有什么想法吗?

0 投票
3 回答
9151 浏览

list - 在 Prolog 中实现“last”

我试图通过阅读 Ulle Endriss 的讲义来了解 Prolog 编程。当我对一个练习的解决方案没有达到预期的效果时,我发现很难给出一个好的解释。我认为这与我对 Prolog 评估表达式的方式的不稳定理解有关。

第 20 页的练习 2.6 要求递归实现谓词last1,其行为类似于内置谓词last。我的尝试如下:

它给出了正确的答案,但是对于包含多个元素的列表,我必须键入分号来终止查询。这last1与内置的last.

如果我切换我声明规则和事实的顺序,那么在这两种情况下我都需要键入分号。

我想我知道为什么 Prolog 认为last1可能有更多的解决方案(因此是分号)。我想它遵循评估顺序

这似乎表明我应该寻找一种方法来避免Rest[]. 无论如何,我无法解释为什么切换声明顺序应该有任何效果。

问题 1: 的行为的正确解释是last1什么?

问题 2: 我怎样才能实现一个last1与内置的无法区分的谓词last