List 如何在GNU Prolog中设置和打印网格

List 如何在GNU Prolog中设置和打印网格,list,grid,prolog,wumpus-world,List,Grid,Prolog,Wumpus World,我正在阅读这些prolog教程,我觉得我已经很好地掌握了它们使用的一些概念,但是我在尝试实现一个类似网格的系统时遇到了一个问题 我知道我可以用一个列表来设置它,但到目前为止我还没有找到实现它的方法,是否有资源或某种类型的源代码可以指导我如何在prolog中实现网格系统 我想从头开始制作的网格系统是一个4x4,它应该像这样打印出来 (4,1)(4,2)(4,3)(4,4) (3,1)(3,2)(3,3)(3,4) (2,1)(2,2)(2,3)(2,4) (1,1)(1,2)(1,3)(1,4)

我正在阅读这些prolog教程,我觉得我已经很好地掌握了它们使用的一些概念,但是我在尝试实现一个类似网格的系统时遇到了一个问题

我知道我可以用一个列表来设置它,但到目前为止我还没有找到实现它的方法,是否有资源或某种类型的源代码可以指导我如何在prolog中实现网格系统

我想从头开始制作的网格系统是一个4x4,它应该像这样打印出来

(4,1)(4,2)(4,3)(4,4)

(3,1)(3,2)(3,3)(3,4)

(2,1)(2,2)(2,3)(2,4)

(1,1)(1,2)(1,3)(1,4)

征求意见

我之所以在网格中需要它,是因为我开始为我正在创建的wumpus世界构建一个迷宫式的结构,我认为这是我应该如何处理的,但我遇到了一个问题,创建一个列表类型来满足我想要的这种类型的结构

在这里,我可以指定一个正方形(网格的一部分),例如(3,2),作为我希望我的代理遍历此网格的任何正方形中的一个坑、wumpus或gold

如果这是一个错误的方法,我会很感激为什么不是这样,并希望得到一些反馈,我需要集中精力


如果这是错误的,我将感谢任何反馈。

您可以使用列表列表来表示您的网格
[[4,1,I41],[4,2,I42],…[0,4,I04]

其中每个子列表都有坐标和关于每个单元格中的内容的信息

通过对该列表应用某些运算符(例如,将单元格内容移动到另一个单元格),可以将该列表重写为另一个类似的列表。重写将由适当的谓词完成,这是通常的逻辑编程方法,与命令式语言不同,命令式语言中的数据结构内容将通过对单元格的赋值进行修改


如果网格较大,则有一种更为精细的方法,使用循环术语(有理树)表示网格并在其中“移动”,并使用一个单独的术语表示如上所述重写的网格内容。

该“网格”应具有什么形式?您想要一个表示网格的数据结构,还是希望通过副作用输出网格?@repeat提出的问题非常合理:您将如何处理网格?你为什么要这样打印出来?你真的需要这样打印吗,或者你只需要一个具有类似布局的数据结构?这是我在网上找到的wumpus world示例,我从来没有做过这样的逻辑编程,所以我尝试以一种方式设置它,以便我可以将每个正方形(坐标)分配给一个坑、wumpus或gold,给出这些事实。然后我需要我的代理遍历这些列表/方块/坐标,如果需要的话杀死wumpus,并取回黄金,然后返回到1,1(他总是从那里开始)。唯一显示的是4x4栅格的标准x,y栅格坐标的通用显示,原点在左下角。我不确定你指的是什么方法。我看不到任何序言代码,也看不到您目前如何判断给定位置是否有矿坑、wumpus或黄金。也许可以澄清一点?你查过Prolog列表结构了吗?这是Prolog中用于做事的主要结构。前面的评论询问了这个网格将用于什么的上下文,因为我给出了问题的范围,我一直试图将其实现为一个列表,但到目前为止出现了一些错误,我真的不理解创建这样一个网格所需要使用的操作的语法,这就是为什么我要问这个问题。我不想寻求帮助,包括附加的东西(比如wumpus位置和坑的位置),这将在以后出现,我只想建立一个网格,这样我就可以开始操纵它,我基本上需要创建一个结构来处理。