Prolog 程序范例
- 格式:doc
- 大小:43.50 KB
- 文档页数:6
3的阶乘:predicatesfactorial(unsigned,real)clausesfactorial(1,1):-!.factorial(X,FactX):-Y=X-1,factorial(Y,FactY),FactX=X*FactY.goalX=3,factorial(X,Y).输出表domainslist=integer*predicateswrite_a_list(list)clauseswrite_a_list([]).write_a_list([H|T]):-write(H),nl,write_a_list(T).goalwrite_a_list([1,2,3]).统计表元素个数domainslist=integer*predicateslength_of(list,integer)clauseslength_of([],0).length_of([_|T],L):-length_of(T,TailLength),L=TailLength+1.goallength_of([1,2,3],L).每个元素加1domainslist=integer*predicatesadd1(list,list)clausesadd1([],[]).add1([Head|Tail],[Head1|Tail1]):-Head1=Head+1,add1(Tail,Tail1).goaladd1([1,2,3,4],NewList).删除整数表中的负数domainslist=integer*predicatesdiscard_negatives(list,list)clausesdiscard_negatives([],[]).discard_negatives([H|T],ProcessedTail):-H<0,!,discard_negatives(T,ProcessedTail). discard_negatives([H|T],[H|ProcessedTail]):-discard_negatives(T,ProcessedTail).goal discard_negatives([2,-45,3,468],X).判断表成员domainsnamelist=name*name=symbolpredicatesmember(name,namelist)clausesmember(Name,[Name|_]).member(Name,[_|Tail]):-member(Name,Tail).goalmember(susan,[ian,susan,john]).合并表domainsintegerlist=integer*predicatesappend(integerlist,integerlist,integerlist) clausesappend([],List,List).append([H|L1],List2,[H|L3]):-append(L1,List2,L3).goalappend([1,2,3],[5,6],L).输出表中元素domainsintegerlist=integer*namelist=symbol*predicateswritelist(integerlist)writelist(namelist)clauseswritelist([]).writelist([H|T]):-write(H,""),writelist(T).goal writelist([1,2,3,4]),nl.找出一个数字链表的最大数值。
Prolog语言及程序设计简介Prolog语言是一种基于逻辑编程的编程语言,它的特点是使用规则和事实来描述问题和解决方案,而不是通过指令的序列来控制程序的执行流程。
Prolog语言以一种声明式的方式描述问题,允许程序员通过定义规则和事实来描述问题的逻辑关系,然后通过查询来得到问题的解答。
Prolog语言在领域有广泛的应用,特别适合用于解决逻辑推理、知识表示和专家系统等问题。
Prolog基本语法Prolog语言的基本语法由规则和事实组成。
规则是由一个头部和一个体部组成的,头部描述了规则的,而体部描述了规则的前提条件。
事实是由一个或多个项组成的简单语句,描述了一些已知的逻辑关系。
下面是一个简单的Prolog规则和事实的例子:prologfather(peter, john).father(peter, mary).parent(X, Y) :father(X, Y).在上面的例子中,规则`parent(X, Y) :father(X, Y)`表示,如果一个人X是另一个人Y的父亲,X就是Y的父母。
事实`father(peter, john)`和`father(peter, mary)`表示,peter是john和mary的父亲。
Prolog查询在Prolog中,可以通过查询来获取问题的解答。
查询是以一个问题的形式提出的,Prolog会根据已知的规则和事实来寻找满足问题的解答。
下面是一个简单的Prolog查询的例子:prologparent(peter, john).在上面的例子中,查询`parent(peter, john)`表示,找出一个人X,使得peter是X的父母,而john是X的子女。
Prolog会在已知的规则和事实中寻找满足这个条件的解答。
Prolog程序设计Prolog程序设计是通过定义规则和事实来解决问题的过程。
可以使用Prolog语言来实现各种不同的算法和逻辑推理。
下面是一个简单的Prolog程序设计的例子:prologfactorial(0, 1).factorial(N, Result) :-N > 0,N1 is N 1,factorial(N1, Result1),Result is N Result1.在上面的例子中,定义了一个计算阶乘的规则`factorial(N, Result)`,如果N是0,则结果是1;否则,结果是N乘以(N-1)的阶乘。
实验一 PROLOG 语言编程一、实验目的1.加深学生对逻辑程序运行机理的理解。
2.掌握PROLOG 语言的特点、熟悉其编程环境。
3.为今后人工智能程序设计做好准备。
二、预习要求1.复习PROLOG 语言的语法。
2.熟悉PROLOG 的语言环境。
3.阅读一些PROLOG 的程序。
三、实验内容1、编写一个描述亲属关系的PROLOG 程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
2、编写一个路径查询程序,使其能输出图中所有路径。
提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。
3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。
为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。
(a )用Prolog 规则表述这个雇主的选择准则。
(b )用Prolog 事实描述下列申请者的情况:史密斯住在剑桥,会开车但不会打字。
布朗住在伦敦,会开车也会打字。
简住在格拉斯哥,不会开车但会打字。
埃文斯住在伦敦,会开车也会打字。
格林住在卢顿,会开车也会打字。
(c )要求Prolog 提供一个候选人名单。
e四、代码1、编写一个描述亲属关系的PROLOG程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
domainsname=symbol.predicatesmother(name,name).father(name,name).grandfather(name,name).grandmother(name,name).sister(name,name).aunt(name,name).goalgrandmother(a,X),write("X=",X),nl,father(b,Y),write("Y=",Y),nl,sister(d,Z),write("Z=",Z),nl,aunt(d,T),write("T=",T).clausesmother(a,c).mother(a,d).mother(c,g).mother(c,f).father(b,c).father(b,d).father(e,g).father(e,f).grandfather(X,Z):-father(X,Z),father(Y,Z).grandmother(X,Z):-mother(X,Y),mother(Y,Z).sister(X,Y):-mother(Z,X),mother(Z,Y).aunt(X,Y):-mother(Z,Y),sister(Z,X).2、编写一个路径查询程序,使其能输出图中所有路径。
3的阶乘:predicatesfactorial(unsigned,real)clausesfactorial(1,1):-!.factorial(X,FactX):-Y=X-1,factorial(Y,FactY),FactX=X*FactY.goalX=3,factorial(X,Y).输出表domainslist=integer*predicateswrite_a_list(list)clauseswrite_a_list([]).write_a_list([H|T]):-write(H),nl,write_a_list(T).goalwrite_a_list([1,2,3]).统计表元素个数domainslist=integer*predicateslength_of(list,integer)clauseslength_of([],0).length_of([_|T],L):-length_of(T,TailLength),L=TailLength+1.goallength_of([1,2,3],L).每个元素加1domainslist=integer*predicatesadd1(list,list)clausesadd1([],[]).add1([Head|Tail],[Head1|Tail1]):-Head1=Head+1,add1(Tail,Tail1).goaladd1([1,2,3,4],NewList).删除整数表中的负数domainslist=integer*predicatesdiscard_negatives(list,list)clausesdiscard_negatives([],[]).discard_negatives([H|T],ProcessedTail):-H<0,!,discard_negatives(T,ProcessedTail). discard_negatives([H|T],[H|ProcessedTail]):-discard_negatives(T,ProcessedTail).goal discard_negatives([2,-45,3,468],X).判断表成员domainsnamelist=name*name=symbolpredicatesmember(name,namelist)clausesmember(Name,[Name|_]).member(Name,[_|Tail]):-member(Name,Tail).goalmember(susan,[ian,susan,john]).合并表domainsintegerlist=integer*predicatesappend(integerlist,integerlist,integerlist) clausesappend([],List,List).append([H|L1],List2,[H|L3]):-append(L1,List2,L3).goalappend([1,2,3],[5,6],L).输出表中元素domainsintegerlist=integer*namelist=symbol*predicateswritelist(integerlist)writelist(namelist)clauseswritelist([]).writelist([H|T]):-write(H,""),writelist(T).goal writelist([1,2,3,4]),nl.找出一个数字链表的最大数值。
用Prolog编写的人工智能专家系统设计与实现人工智能(Artificial Intelligence,AI)作为一门前沿的科学技术,正在逐渐渗透到各个领域,并在其中发挥着重要作用。
专家系统(Expert System)作为人工智能的一个重要分支,在知识表示和推理方面具有独特优势,被广泛应用于医疗、金融、工业控制等领域。
而Prolog作为一种逻辑编程语言,其规则引擎和模式匹配特性使其成为构建专家系统的理想选择。
本文将介绍如何使用Prolog编写人工智能专家系统,包括设计思路、实现步骤和案例分析。
1. 专家系统概述专家系统是一种模拟人类专家决策过程的计算机程序,通过将专家的知识和经验转化为计算机可处理的形式,来解决复杂的问题。
专家系统通常由知识库、推理机制和用户接口三部分组成,其中知识库存储了领域知识,推理机制根据用户输入的问题和知识库中的规则进行推理,最终给出结论或建议。
2. Prolog简介Prolog是一种基于逻辑的编程语言,其核心思想是利用逻辑规则进行推理。
Prolog程序由事实(Facts)和规则(Rules)组成,通过匹配规则中的条件来实现推理过程。
Prolog具有强大的模式匹配能力和自动回溯机制,非常适合用于构建专家系统。
3. 人工智能专家系统设计3.1 知识表示在设计人工智能专家系统时,首先需要将领域知识表示为Prolog 中的事实和规则。
事实通常包括对象之间的关系或属性,而规则描述了根据某些条件得出结论的推理过程。
例如,在医疗领域的专家系统中,可以表示疾病与症状之间的关系,以及根据症状推断可能患有的疾病。
3.2 推理机制推理是专家系统的核心功能,Prolog通过自动搜索匹配规则来实现推理过程。
当用户提出问题时,系统会根据用户输入的信息和知识库中的规则进行匹配,并逐步推导出结论。
如果存在多个可能的结论,Prolog会尝试不同路径直到找到所有可能解。
3.3 用户接口为了方便用户与专家系统交互,需要设计友好的用户接口。
逻辑编程语言Prolog基础## 什么是Prolog?我们先给出一个例子.man(jack)man(dylan)happy(jack)playGuitar(jack) :- happy(jack)运行:?- man(jack)Prolog回答:yes再运行:?- playGuitar(jack)Prolog回答同样是:yes上面的例子展示的就是Prolog程序和它的运行以及运行结果.Prolog是一种基于模式匹配,树型结构和自动回溯等机制的面向目标的编程语言。
这几个机制构成了灵活而强大的编程框架. Prolog尤其适用于包含结构化对象以及这些对象之间的关系的问题. 例如,prolog可以依据空间关系和一般规则进行推理. 所以,对于人工智能和非数值编程,prolog是一种强大的语言。
字面上看,Prolog意思是以逻辑(logic)编程. 此观念来自于20世纪70年代初期。
早期开发者有Robert Kowalski, Maarten Van Emden 和Alain Colmeraner.在低级编程语言中,程序员往往指定计算机如何做一件事(How型语言). 在高级编程语言中,程序员给计算机指定需要做什么. 编程语言是从低级向高级演化的. Fortran, C, Lisp,Python,Java等几乎所有语言都属于How型语言. 相反地,Prolog舍弃了“指定计算机如何做事”这样的传统. 它鼓励程序员描述问题,而不是描述解决问题的详尽的方式. Prolog 为我们提供了另外一种编程的方式. 它背后的科学是人工智能. 我们可以从中学习到一些解决问题的观念,比如问题化简,回溯链,各种搜索技术等. Prolog可以让我们将抽象概念具体化. 编程者只需要指定什么是已知的,什么问题需要解决,即编程人员更关注事实而不是算法.## Prolog语法Prolog程序由语句(clauses)构成。
语句又由对象和关系构成. 例如,上例中的 man(jack)man就是一种关系,它可以指明对象的性别; jack就是该关系中的对象.运行Prolog程序的方式很简单: 向程序提问. 语法如下:?-关系表达式.其中,?- 是提示符.后面有个结束符(.).例如:?- happy(jack).写语句时,常需要用到符号”:-”.:- 表示”如果”,或“蕴含于”.例如:playGuitar(jack) :- happy(jack)上面代码的意思是:如果jack高兴,那么jack就要弹吉他.:- 的右边叫主体;:- 的左边叫规则头.下面我们通过一个例子来看Prolog的机制,从中可见多个重要的概念. 例如, 甲(a)是乙(b)的父母,可写为:parent(a,b)parent是关系名称; a,b 是该关系的参量.## Prolog举例下面我们以中国近代著名的家庭义宁陈宝箴家的家谱为例,来看看Prolog的运行机制. 家谱如下:graph TB陈宝箴 --> 陈三立黄淑贞 --> 陈三立黄淑贞--> 陈三畏陈三立 --> 陈师曾陈三立 --> 陈寅恪陈师曾 --> 陈封怀```在以下代码中,我们将人名用其拼音首字母的小写代替. 人名和拼音首字母的对应如下:陈宝箴 cbz黄淑贞 hsz陈三立 csl陈三畏 csw陈师曾 csz陈寅恪 cyk陈封怀 cfh整个家谱由下列prolog程序给出:parent(cbz,csl).parent(hsz,csl).parent(hsz,csw).parent(csl,cyk).parent(csl,csz).parent(csz,cfh).此程序包含6个语句. 每个语句声明了一个parent关系. 当此程序与prolog系统交互时,prolog就parent这一关系提问. 例如,陈三立是陈寅恪的父亲吗?实现代码如下: ?- parent(csl,cyk).当prolog发现这是一个已经声明的事实,因此prolog会给出答案:yes我们也可问程序:“陈三畏是陈师曾的父母吗?”?-parent(csw,csz)prolog回答:no因为程序并未提及陈三畏是否为陈师曾父母.当然我们也可问:“黄淑贞是Alice的父母吗?”?-parent(hsz,alice)Prolog不会判断alice是中国人名还是外国人名. prolog仅仅从程序中的关系来做判断. 因为并未听过”ALice”这个人,因此它果断给出结果:no但是,如果我们问“谁是陈三畏的父母?”这样的问题时,prolog确实可以给出我们一个值,而不仅仅是yes或no.?- parent(X,csw).Prolog给出的回答是X=hsz同理,我们可以问:”谁是陈三立的子女?“?- parent(csl,X)输出结果为:X=csz这里,我们只得到一个回答. 可是,从家谱中给我们可以发现看到陈三立的子女不止一个,所以我们期待能看到所有的结果的操作. 这时,我们输入一个分号,那么Prolog就会给出其余的答案:X=cyk由于上图中没有给出陈三立更多子女的信息,所以,如果我们试图知道更多答案,Prolog 会回答“no”.考虑一个更复杂的情形. 我们可以问诸如”谁是谁的父母?”这样的问题. 提炼一下该问题,它就变为:找出X,Y,使得X是Y的父母. 用Prolog表示为:?- parent(X,Y).Prolog会找出所有的”父母-子女“对.Prolog一次只显示一个解,直到所有的解被找出. 结果如下:X=cbzY=csl;X=hszY=csl;X=hszY=csw;X=cslY=csz;...我们还可以问更加复杂的问题. 比如,”谁是陈封怀的祖父母?“这个关系我们命名为grandparent. 显然,我们的程序中没有grandparent这一关系. 虽如此,我们可以将这一问题的解决划分为两步.让每一名学员高薪就业第一步,谁是陈封怀的父母?设为Y.第二步,谁是Y的父母?设为X.Prolog将这一复合问题写出两个简单语句序列:?- parent(Y,cfh), parent(X,Y).答案为:X= cslY= csz复合语句可以理解为:找出X,Y,使得这两个条件成立:parent(Y,cfh) 和parent(X,Y). 这两个条件的顺序并不重要, 所以这个复合问题也可以写成?- parent(X,Y), parent(X,cfh).而结果不会改变.我们再举最后一例. 陈寅恪和陈师曾有共同的父母吗?同样,我们可以由两步得出:第一步,谁是陈寅恪的父母,设为X.第二步,X是陈师曾的父母吗?代码如下:?- parent(X,cyk), parent(X,csz).结果如下:让每一名学员高薪就业 X=csl从上面的例子中,我们看出了Prolog程序的一些特征。
Prolog逻辑编程语言建模实践案例分享在计算机科学领域中,逻辑编程语言被广泛应用于问题求解和知识表达方面。
Prolog(Programming in Logic)作为其中的一种重要逻辑编程语言,具有非常强大的建模能力。
本文将通过分享几个Prolog建模实践案例,以展示该语言在解决实际问题时的优势。
1. 汽车诊断系统假设我们要设计一个汽车诊断系统,可以根据用户输入的车辆异常症状来判断可能的故障原因,并给出相应的修复建议。
利用Prolog可以轻松地建立一个知识库,其中包含各种不同故障及其症状的关联。
例如,如果发动机发出异常声音并且油耗增加,系统可以根据这些输入自动诊断可能是排气系统问题,并给出相应的修复建议。
通过使用Prolog的模式匹配和逻辑推理机制,我们可以快速有效地实现这样一个汽车诊断系统。
2. 旅行规划系统假如我们要设计一个旅行规划系统,用户可以输入自己的出发地和目的地,系统可以自动帮助用户规划最佳的旅行路线。
利用Prolog可以很方便地建立一个地理知识库,其中包含各个城市之间的距离、交通方式和时间等信息。
通过在这个知识库上进行逻辑推理,系统可以根据用户提供的起始点和目标点,找到最短的路线,并提供相应的交通工具和时间表。
这样的旅行规划系统可以帮助用户减少在规划旅行时的繁琐工作,提供更好的旅行体验。
3. 学生选课系统学生选课是每个大学校园中重要的事务之一。
利用Prolog 可以轻松地建立一个学生选课系统,用于帮助学生选择合适的课程。
系统可以根据学生的兴趣、先修课程要求和当前可选课程等信息,提供最佳的选课建议。
通过在Prolog知识库中存储学生的个人信息、课程信息和选修规则等数据,系统可以利用Prolog的逻辑推理功能,从中推导出最佳的选课方案。
这样的学生选课系统将大大减轻学生选课过程中的困扰,提供更加个性化的课程选择。
通过上述案例的分享,我们可以清楚地看到Prolog逻辑编程语言在建模实践中的优势。
visual prolog例子编码VisualProlog是一种面向对象的编程语言,它具有简单易用的语法和强大的功能。
在VisualProlog中,可以使用类和对象来定义和组织数据,并通过定义方法来实现数据操作和行为。
以下是一个简单的VisualProlog例子编码,可以帮助你了解VisualProlog的基本用法。
首先,我们定义一个名为“Person”的类,它表示一个人的基本信息。
Person类包含姓名、年龄和性别三个属性,以及一个方法“greet”用于打招呼。
```prologclassPerson;attributename:string;attributeage:integer;attributegender:string;methodgreet(Strings):string"Sayhellototheperson"{return"Hello,mynameis"++name++"andIam"++to_string(age)++" yearsold."++s;}endclass;```接下来,我们可以创建一个名为“Alice”的对象,并使用greet 方法向她打招呼。
```prologalice=Person(name='Alice',age=25,gender='Female');print(alice.greet('fromVisualProlog'));```这将输出:```lessHello,mynameisAliceandIam25yearsold.fromVisualProlog```除此之外,VisualProlog还提供了许多其他功能和库,例如数据库操作、图形用户界面(GUI)编程、网络编程等。
下面是一个使用VisualProlog数据库操作的简单例子:首先,我们定义一个名为“Database”的类,它表示一个数据库连接对象。
3的阶乘:predicatesfactorial(unsigned,real)clausesfactorial(1,1):-!.factorial(X,FactX):-Y=X-1,factorial(Y,FactY),FactX = X*FactY.goalX=3,factorial(X,Y).输出表domainslist = integer*predicateswrite_a_list(list)clauseswrite_a_list([]).write_a_list([H|T]):-write(H),nl,write_a_list(T).goalwrite_a_list([1,2,3]).统计表元素个数domainslist = integer*predicateslength_of(list,integer)clauseslength_of([], 0).length_of([_|T],L):-length_of(T,TailLength),L = TailLength + 1.goallength_of([1,2,3],L).每个元素加1domainslist = integer*predicatesadd1(list,list)clausesadd1([], []).add1([Head|Tail],[Head1|Tail1]):- Head1= Head+1,add1(Tail,Tail1).goaladd1([1,2,3,4],NewList).删除整数表中的负数domainslist = integer*predicatesdiscard_negatives(list,list)clausesdiscard_negatives([],[]).discard_negatives([H|T],ProcessedTail):-H < 0,!,discard_negatives(T, ProcessedTail). discard_negatives([H|T],[H|ProcessedTail]):- discard_negatives(T, ProcessedTail).goal discard_negatives([2,-45,3,468],X).判断表成员domainsnamelist = name*name = symbolpredicatesmember(name,namelist)clausesmember(Name,[Name|_]).member(Name,[_|Tail]):-member(Name,Tail).goalmember(susan,[ian,susan,john]).合并表domainsintegerlist = integer*predicatesappend(integerlist,integerlist,integerlist) clausesappend([],List,List).append([H|L1],List2,[H|L3]):-append(L1,List2,L3).goalappend([1,2,3],[5,6],L).输出表中元素domainsintegerlist = integer*namelist = symbol*predicateswritelist(integerlist)writelist(namelist)clauseswritelist([]).writelist([H|T]):-write(H, " "),writelist(T).goal writelist([1,2,3,4]),nl.找出一个数字链表的最大数值。
domains/*领域段*/list=integer*.predicates/*谓词段*/max(list,integer)clauses/*子句段,存放所有的事实和规则*/max([H], H).max([H | T], H) :- max(T, X), H >= X.max([H | T], X) :- max(T, X), H < X.动态生成关于N个学生(包括学号、姓名、出生年月日、成绩)的内部事实数据库,并计算学生成绩的平均分。
domainsnum=symbolname=symbolbirthday=date(integer,integer,integer)score=reallist=score*factsstud(num,name,birthday,score)predicatesrunadd_fact(integer)sumlist(list,real)clausesrun:-write("enter the N:"),nl,readint(N),add_fact(N),findall(Score,stud(_,_,_,Score),Slist),sumlist(Slist,Sum),Ave=Sum/N,nl,write("the average score is :",Ave).add_fact(N):-N>=1,!,nl,write("the ",N," student:"),nl,write("num:"),readln(Num),write("name:"),readln(Name),write("year:"),readint(Year),write("month:"),readint(Month),write("date:"),readint(Date),write("score:"),readreal(Score),assertz(stud(Num,Name,date(Year,Month,Date),Score)),N1=N-1,add_fact(N1).add_fact(N):-N<1.sumlist([],0).sumlist([H|T],Sum):-sumlist(T,S1),Sum=H+S1.goalrun.实现表的插入排序,要求表中的N个元素由键盘读入domainselement=integerlist=element*predicatesrun(list)insert_N(list,element,list)append(list,list,list)write_list(list)clausesrun(List):-readint(N),N>0,!,insert_N(List,N,List1),write_list(List1),nl,run(List1).run(_).insert_N([],N,[N]):-!.insert_N([H|T],N,[H1|T1]):-H<=N,!,H1=H,insert_N(T,N,T1). insert_N([H|T],N,[H1|T1]):-H>N,H1=N,append([H],T,T1).append([],L2,L2):-!. append([H1|T1],L2,[H1|T3]):- append(T1,L2,T3). write_list([]):-!.write_list([H|T]):-write(H," "),write_list(T).goalrun([]).求和domainslist = integer*predicatessumlist(list,integer)clausessumlist([],0).sumlist([H|T],Sum):-sumlist(T,S1),Sum=H+S1.goalsumlist([1,2,3],Sum).求最大值domainslist=integer*predicatesmax(list,integer)clausesmax([H],H).max([H|T],H):-max(T,X),H >= X.max([H|T],X):-max(T,X),H < X.goalmax([1,2,4],H).求最小值domainslist=integer*predicatesmax(list,integer)clausesmax([H],H).max([H|T],H):-max(T,X),H <= X.max([H|T],X):-max(T,X),H > X.goalmax([1,2,4],H).求个数domainslist = integer*predicateslength_of(list,integer) clauseslength_of([], 0). length_of([_|T],L):- length_of(T,TailLength), L = TailLength + 1. goallength_of([1,2,3],L).求平均值predicatesadv(real,real)clausesadv(X,Y):-Diff = X/Y,write("adv= ",Diff,'\n'). goalX=47,Y=4,adv(X,Y).。