首页 > 解决方案 > Prolog如何在N×N网格上以“X/Y”格式查找所有坐标

问题描述

我看过很多提出类似问题的教程,但我遇到的问题是我们的教练希望我们使用精确形式“X/Y”的变量来表示我们的坐标,中间带有斜线,并且我不确定如何映射如何将代码映射numlist(1,N,ListToGenerate).为这种格式的在线示例。

所以,作为一个具体的例子,我想知道,我如何创建一个列表,其中的值从 1/1 运行到 N/N,更抽象地说,你甚至将这种格式的变量称为什么?它们不是元组,也不是 2 元素列表……我想称它们为复合变量,但我也不确定这是否正确

标签: prolog

解决方案


如果您不确定“实际”一词是什么,请使用write_canonical/1获取该词的规范表示。

例如:

?- write_canonical(a/b)。
/(a,b)

因此,您会看到: 形式的术语X/Y 术语/(X,Y),也就是说,就像任何其他复合术语一样。在这个具体的例子中,函子是/,它也是一个中缀运算符,因此除了函数符号之外,您还可以使用中缀符号。您所说的“元组”也是复合术语。事实上,Prolog 没有“元组”。

您构建这些术语的方式与所有其他术语完全相同:您可以直接将它们写下来,如 in[1/1,1/2,1/3,...] 通过谓词描述它们。

在您的特定情况下,一个全解决方案谓词 likefindall/3可以帮助您将所有解决方案收集between/3到一个列表中:

findall(X/Y, ..., List)

我把这...部分作为一个挑战。


推荐阅读