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