问题标签 [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.
design-patterns - 如何在没有剪切的情况下对 PROLOG 中的包装变量进行模式匹配?
我对 Prolog 程序员有一个非常简单的问题。这应该很容易,但我对这种语言没有任何经验,所以请帮忙。我正在尝试在 Prolog 中解释一些简单的编程语言。在这种语言中,我可以有两种类型的变量——简单变量和数组变量。我有一个计算给定变量值的函数:
变量可以是简单的变量,也可以是x
数组变量,如array(ident, index)
. 我不知道应该如何在 Prolog 中编写该函数,因此它对常规变量和数组变量做了不同的事情。我想出了这样的事情:
这行得通,但必须有一些更好的方法。
prolog - Prolog 使用削减
我正在 Prolog 中重写以下函数:
V1:
作为 V2:
然后我想尝试削减。对于绿色切割 (V3):
对于红色切割 (V4):
但是,我不明白他们的优势,因为删除剪辑将允许代码的相同行为......有什么帮助吗?
prolog - Prolog - 红色切割和绿色切割之间的区别
我开始学习 prolog,并想让整个剪辑更清晰。我读过“绿色剪切不会改变程序的声明性含义,而红色剪切会”。但是,该程序的含义并不是真正纯粹的声明性(仅从 prolog 实际上回溯所有选项这一事实)。
这是一个例子:
据说这是绿切。但是如果我运行这个:
我会得到“真”而没有切割,而“假”有切割。那么,我想念什么?
提前致谢。
prolog - 切(!)与返回
我正在 Prolog 中开发一个谓词,它有可能在它结束之前终止。出于这个原因,我一直在寻找类似于return;
(C++) 的命令。我使用了 acut !
但我怀疑它的字面意思是什么,以及它是否确实做了什么return;
。前任:
上面的功能完全一样吗?
prolog - 为什么我们使用“!” 在序言中
这是我试图理解的代码。
'!' 有什么用?和上面代码中的谓词 p(,,)。或者任何人都可以在上述代码的每一步中添加注释,以便我能够理解。谢谢。
prolog - Prolog 程序:另一种定义函子的方法
double/2
在我的最后一次考试中,我必须根据以下说明 编写一个名为 的 Prolog 谓词:如果是相同长度的整数列表,double(X, Y)
则应该为真,其中每个偶数都替换为其双精度数。因此,例如,查询
应该结果
Y
X
X
double([1, 3, 2, 4], X).
X = [1, 3, 4, 8].
为了简单起见,我被允许使用 functoreven/1
而不定义它(实际上它很容易定义它),当参数为偶数时为真,否则为假。实际上,我最终也使用 functor 编写了程序odd/1
。但我的教授告诉我:“你可以只用偶数来写,没必要用奇数!” 所以我想知道我怎么能这样写。
我写的是以下内容:
备注:如果我even(N)
从最后一行代码中删除(所以如果我使用 only odd(N)
,这实际上与 using only 相同even(N)
,因为我只使用其中一个),那么程序仍然可以工作。但这不是一个理想的解决方案,因为这样“剪切”变成了红色剪切(在我的程序中它是绿色剪切)。
prolog - 在跟踪元解释器序言中实现剪切
我有这个跟踪元解释器,从上一个问题Prolog unbind bound variable改变。
我不明白如何解释cut。感谢用户@false,他告诉我cut 的实现很糟糕,我的问题是,我应该如何在这个元解释器中实现cut?
prolog - 剪切子句的开头以及“cut”、`!` 和 `fail` 之间的关系
将 cut ( !
) 放在子句的开头是什么意思?
它们之间有什么区别!
以及 fail
如何相关?
谢谢。
我在想,对于fail
,谓词只会“失败”大声笑,这与不回溯不同吗?只是想确定:)
prolog - 下面代码中的修剪选择点如何使其更高效(Prolog)?
在下面给出的代码中,有一个!
(cut) 修剪了选择点以提高效率。我很确定reverse
谓词和agent_do_moves
谓词是必不可少的。
prolog - Prolog - 了解cut的使用
我无法清楚地理解 cut 的用法。例如在这种情况下:flatten,真的需要吗?即使没有两个切谓词,它也对我有用(我尝试删除)。哪些情况会导致回溯进入cut?删除剪辑后,您对“序言的艺术”(Shapiro E.,Sterling L.)一书具有相同的实现,即:
这引出了另一个问题:是否有必要在第二个子句中检查它是否不是列表?如果它是一个单独的术语将不会与第一个子句统一......不是吗?