我在基本Prolog中寻求帮助,这是一种语言难以掌握的语言。我对其他语言(C++,Lisp,Java,Assembly等)非常熟悉,但是对于Prolog来说,这是一个完整的新手。在Prolog中使用2D数组
什么需要解决 - 在基础英语中:给定2个参数,在2D阵列中找到相应的数字。
这个问题是一个无脑的简单的谜题在网上,要求你选择一个数字,选择数字的颜色,然后选择包含您给定的数字的房子。拼图的设置使每个相应的颜色/房屋组合只有一个数字。
目前什么是地点:
function guess(Color, Houses) :-
<--Need what goes here -->
green(1, 15, 23, 24).
pink(2, 6, 10, 18).
etc...
houseA(2, 4, 7, 14).
etc...
的代码必须在颜色和房屋匹配挑选出正确的数字。因此,例如,给出"?- guess(pink, houseA)"
应该返回"Your number is 2."
我一直在写下关于如何在prolog中实现这个想法,并没有一个让我更进一步。我不知道如何实现if/else语句来检查我应该搜索哪种颜色,或者如何检查房屋和颜色之间的对应关系,甚至是如何“返回”值!
在我看来,我错过了一个关键点或思考语言的方式。
任何帮助,将不胜感激。谢谢!
非常有用的答案 - 谢谢!该程序正在工作,但我有2个查询: 首先,什么是“电话”?它看起来像一个内置函数,它将参数与列表名称相匹配,但对于任何语言来说,这似乎都是一件奇怪的事情。 其次,我的程序输出如下所示: “您的号码是25. Number = 25.” 因为他是不够的,所以我的老师简要地描述了一个似乎是Lisp-y想法的序言范式 - 返回最后一个评估值。这在Prolog中如何工作,以及如何告诉Prolog不要打印第二行? –
对于调用部分,您可以参考swi-pl手册[此处](http://www.swi-prolog.org/pldoc/doc_for?object=call/2),它基本上是一个运行谓词保持的谓词通过你传给它的名字作为第一个参数,你将它作为第二个参数传递给它。调用被定义为从2到多达你想要的(在解释器模式中只有6个),所以基本上你可以调用它来处理在解释器模式下处理多达5个参数的谓词。对于第二部分,我不知道如何防止prolog争取他统一的尝试,但其他人可能比我更有见识:) – m09