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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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