Prolog:在列表中查找第N个元素

我正在尝试在Prolog中找到列表的第n个元素。这是我尝试使用的代码:

Cells = [OK, _, _, _, _, _] ....next_safe(_) :-facing(CurrentDirection),delta(CurrentDirection, Delta), in_cell(OldLoc), NewLoc is OldLoc + Delta,nth1(NewLoc, Cells, SafetyIdentifier),SafetyIdentifier = OK .

基本上,我试图检查给定的单元格是否“OK”可以移动到其中。我遗漏了什么吗?


回答:

@人名,我不太清楚你想要用这段代码做什么,但有一些评论可能会有所帮助。

在Prolog中,以大写字母开头的内容是要在规则中匹配的变量。 _ 是一个特殊的符号,可以用来代替变量名,表示任何值都可以匹配。

因此,如果您给 next_safe(_) 一个特定的值,它只能为您提供一个true/false的答案。Prolog的主要优点之一是通过回溯与变量统一(正如@人名所说)。这意味着,如果正确编写,您只需询问Prolog next_safe(X).,它就会返回所有可能的与X统一的值(安全移动)。

回到关于大写字母的第一点。这意味着 OK 实际上是一个等待匹配的变量。它实际上是一个空盒子,你试图与另一个空盒子匹配。我认为你想要使用的是值 ok,这是不同的。您不能以与其他编程风格相同的方式分配变量。以下内容可能更接近您正在寻找的内容,但我仍然不确定它是否正确,因为它看起来你正在尝试分配一些东西,但我不确定你的 nth1 是如何工作的。

Cells = [ok, _, _, _, _, _] ....next_safe(NewLoc) :-    facing(CurrentDirection),    delta(CurrentDirection, Delta),     in_cell(OldLoc),     NewLoc is OldLoc + Delta,    nth1(NewLoc, Cells, ok).

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注