我已经看过很多提出类似问题的教程,但我遇到的问题是我们的教练希望我们使用精确形式为“X / Y”的变量来表示我们的坐标,并在中,我不知道如何映射如何将numlist(1,N,ListToGenerate).
之类的代码映射到此格式的在线示例。
所以,作为一个具体的例子,我想知道,我如何创建一个值从1/1到N / N 的列表,更抽象地,什么做你甚至用这种格式调用变量?它们不是元组,它们不是2元素列表......我想把它们称为复合变量,但我不确定这是否正确
答案 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)
部分作为挑战。