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

时间:2018-05-15 01:46:04

标签: prolog

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

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

1 个答案:

答案 0 :(得分:5)

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

例如:

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

因此,您看到:X/Y 形式的术语一词<{1}},即任何其他复合词强> 的。在这个具体案例中,仿函数是/(X,Y),它也是中缀运算符,因此除了功能表示法之外,您还可以使用中缀表示法。你所谓的“元组”是也是复合词。事实上,Prolog没有“元组”。

您可以使用与所有其他术语完全相同的方式构建此类术语:您可以直接将其写下 ,如/ 通过谓词。

在您的特定情况下, [1/1,1/2,1/3,...] 之类的 all-solution 谓词可以帮助您将findall/3的所有解决方案收集到列表中:

between/3

我将findall(X/Y, ..., List)部分作为挑战。