问题标签 [prolog-cut]

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

design-patterns - 如何在没有剪切的情况下对 PROLOG 中的包装变量进行模式匹配?

我对 Prolog 程序员有一个非常简单的问题。这应该很容易,但我对这种语言没有任何经验,所以请帮忙。我正在尝试在 Prolog 中解释一些简单的编程语言。在这种语言中,我可以有两种类型的变量——简单变量和数组变量。我有一个计算给定变量值的函数:

变量可以是简单的变量,也可以是x数组变量,如array(ident, index). 我不知道应该如何在 Prolog 中编写该函数,因此它对常规变量和数组变量做了不同的事情。我想出了这样的事情:

这行得通,但必须有一些更好的方法。

0 投票
2 回答
170 浏览

prolog - Prolog 使用削减

我正在 Prolog 中重写以下函数:

V1:

作为 V2:

然后我想尝试削减。对于绿色切割 (V3):

对于红色切割 (V4):

但是,我不明白他们的优势,因为删除剪辑将允许代码的相同行为......有什么帮助吗?

0 投票
1 回答
11753 浏览

prolog - Prolog - 红色切割和绿色切割之间的区别

我开始学习 prolog,并想让整个剪辑更清晰。我读过“绿色剪切不会改变程序的声明性含义,而红色剪切会”。但是,该程序的含义并不是真正纯粹的声明性(仅从 prolog 实际上回溯所有选项这一事实)。

这是一个例子:

据说这是绿切。但是如果我运行这个:

我会得到“真”而没有切割,而“假”有切割。那么,我想念什么?

提前致谢。

0 投票
4 回答
380 浏览

prolog - 切(!)与返回

我正在 Prolog 中开发一个谓词,它有可能在它结束之前终止。出于这个原因,我一直在寻找类似于return;(C++) 的命令。我使用了 acut !但我怀疑它的字面意思是什么,以及它是否确实做了什么return;。前任:

上面的功能完全一样吗?

0 投票
2 回答
271 浏览

prolog - 为什么我们使用“!” 在序言中

这是我试图理解的代码。

'!' 有什么用?和上面代码中的谓词 p(,,)。或者任何人都可以在上述代码的每一步中添加注释,以便我能够理解。谢谢。

0 投票
2 回答
401 浏览

prolog - Prolog 程序:另一种定义函子的方法

double/2在我的最后一次考试中,我必须根据以下说明 编写一个名为 的 Prolog 谓词:如果是相同长度的整数列表,double(X, Y)则应该为真,其中每个偶数都替换为其双精度数。因此,例如,查询 应该结果 YXXdouble([1, 3, 2, 4], X).X = [1, 3, 4, 8].

为了简单起见,我被允许使用 functoreven/1而不定义它(实际上它很容易定义它),当参数为偶数时为真,否则为假。实际上,我最终也使用 functor 编写了程序odd/1。但我的教授告诉我:“你可以只用偶数来写,没必要用奇数!” 所以我想知道我怎么能这样写。

我写的是以下内容:

备注:如果我even(N)从最后一行代码中删除(所以如果我使用 only odd(N),这实际上与 using only 相同even(N),因为我只使用其中一个),那么程序仍然可以工作。但这不是一个理想的解决方案,因为这样“剪切”变成了红色剪切(在我的程序中它是绿色剪切)。

0 投票
1 回答
1191 浏览

prolog - 在跟踪元解释器序言中实现剪切

我有这个跟踪元解释器,从上一个问题Prolog unbind bound variable改变。

我不明白如何解释cut。感谢用户@false,他告诉我cut 的实现很糟糕,我的问题是,我应该如何在这个元解释器中实现cut?

0 投票
1 回答
365 浏览

prolog - 剪切子句的开头以及“cut”、`!` 和 `fail` 之间的关系

将 cut ( !) 放在子句的开头是什么意思?

它们之间有什么区别!以及 fail如何相关?

谢谢。
我在想,对于fail,谓词只会“失败”大声笑,这与不回溯不同吗?只是想确定:)

0 投票
1 回答
229 浏览

prolog - 下面代码中的修剪选择点如何使其更高效(Prolog)?

在下面给出的代码中,有一个!(cut) 修剪了选择点以提高效率。我很确定reverse谓词和agent_do_moves谓词是必不可少的。

0 投票
1 回答
424 浏览

prolog - Prolog - 了解cut的使用

我无法清楚地理解 cut 的用法。例如在这种情况下:flatten,真的需要吗?即使没有两个切谓词,它也对我有用(我尝试删除)。哪些情况会导致回溯进入cut?删除剪辑后,您对“序言的艺术”(Shapiro E.,Sterling L.)一书具有相同的实现,即:

这引出了另一个问题:是否有必要在第二个子句中检查它是否不是列表?如果它是一个单独的术语将不会与第一个子句统一......不是吗?