【发布时间】:2019-08-07 11:26:24
【问题描述】:
我正在尝试在 Prolog 中创建一个程序,但我还是新手,不确定在 Prolog 中生成网格状结构的最佳方法是什么。
例如,假设我有一个谓词 cell/4,它有 4 个参数; North、West、South 和 East。我要创建的是谓词 cell/4 的 NxN 网格,它根据它们在网格中的位置相互连接。
例如,我可以手动创建一个 2x2 网格。期望的结果如下:
North_1 North_2
| |
+---------+----------+ +---------+----------+
| North | | North |
| | Interconnect_1 | |
West_1 -+ West cell/4 East +----------------+ West cell/4 East +- East_1
| | | |
| South | | South |
+---------+----------+ +---------+----------+
| |
Interconnect_2 Interconnect_3
| |
+---------+----------+ +---------+----------+
| North | | North |
| | Interconnect_4 | |
West_2 -+ West cell/4 East +----------------+ West cell/4 East +- East_2
| | | |
| South | | South |
+---------+----------+ +---------+----------+
| |
South_1 South_2
cell(North, West, South, East) :- % Processing logic.
problem(North_1, North_2, West_1, West_2, South_1, South_2, East_1, East_2) :-
cell(North_1, West_1, Interconnect_2, Interconnect_1),
cell(North_2, Interconnect_1, Interconnect_3, East_1),
cell(Interconnect_2, West_2, South_1, Interconnect_4),
cell(Interconnect_3, Interconnect_4, South_2, East_2).
所以我的问题是,如何将这个过程概括为 NxN 网格?我确信有很好的方法来处理problem 谓词的参数,使其更通用problem(North, West, South, East),其中每个参数都是一个列表。不过,我正在努力生成这种类似网格的结构。
【问题讨论】:
-
我会先尝试创建一个双向链表。这在我看来有点像“四重链表”。您认为这样做可能会使这更容易处理。
-
@DanielLyons:双向链表将不可避免地是一个无限项。不是最好的开始。
-
@false 如果你从他的例子中删除 North 和 South,它是一个双向链表。
-
@DanielLyons,感谢您的观点。我将研究如何实现各种链表,看看它会把我带到哪里。
标签: prolog swi-prolog