Prolog如何在N×N网格上找到格式为"X/Y"的所有坐标

Pop*_*nel 1 prolog

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

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

mat*_*mat 5

如果您不确定术语"实际"是什么,请使用write_canonical/1获取术语的规范表示.

例如:

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

所以,你看到:形式的术语X/Y 术语/(X,Y),就像任何其他复合术语一样.在这个具体案例中,仿函数/也是一个中缀运算符,因此除了函数表示法之外,还可以使用中缀表示法.你所谓的"元组" 也是复合词.事实上,Prolog没有"元组".

您在完全相同的方式,因为所有其他条款构造这样的条款:您可以将它们要么写下来,直接,在[1/1,1/2,1/3,...] 通过谓词描述它们.

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

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

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