- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
                        查看更多
                        
                    
                递归 递归是一种功能强大的编程算法,现在绝大部分的程序语言都支持函数的递归调用,Prolog也不例外,而且如果没有递归,Prolog就不能叫做Prolog了。 在Prolog中,当某个谓词的目标中包含了此谓词本身时,Prolog将进行递归调用。 任何语言中的递归定义都包括两个部分:          边界条件          递归部分 边界条件定义最简单的情况。而递归部分,则首先解决一部分问题,然后再调用其自身来解决剩下的部分,每一次都将进行边界检测,如果剩下的部分已经是边界条件中所定义的情况时,那么递归就圆满成功了  PROLOG还提供了存入磁盘和从磁盘读出的谓词:     save(filename)   //存入     consult(filename)  //读出 1.表头与表尾       表头是表中的第一个元素;表尾是表中除第一个元素外的其余元素按原来顺序组成的表。                      表头与表尾示例 例如:       [X∣Y,Z]    ×       [X,Y∣Z]    √ 竖杠前后可以是常量,如:       [a∣Y]       [X∣b]   此表称为无尾表 如果这两个表相匹配合一,则有:       X=a,Y=b(非Y=[b]) 若无竖杠,则不能分离出表尾,如:       [X,Y,Z]与[a,b,c]合一后结果为 X=a,Y=b,Z=c  而非[c] 其他询问:    Goal: append([1,2,3],[4,5],[1,2,3,4,5]).      yes      Goal: append([1,2,3],[4,5],[1,2,3,4,5,6]).       no    Goal:append([1,2,3],Y,[1,2,3,4,5])      Y=[4,5]    Goal:append(X,Y,[1,2,3,4,5])      X=[],Y=[1,2,3,4,5]      X=[1],Y=[2,3,4,5]      X=[1,2],Y=[3,4,5]      递归技术一般只在表处理中使用,其他程序中尽量不用,而用迭代循环。 4.关系表达式     Turbo PROLOG提供了六种常用的关系运算, 即小于、 小于或等于、等于、大于、大于或等于和不等于, 其运算符依次为                  , =, =, , =,       数学中的关系式          Turbo  PROLOG中的关系式       X+1≥Y               X+1=Y       X≠Y                 XY  它们都采用中缀形式。Prolog中的原子形式表示如下: =(X+1,Y)   (X,Y) 这六中关系运算符就是Turbo PROLOG内部定义好的六个谓词。用来比较两个关系式大小。 brother(Name1, Name2):-                  person(Name1, man, Age1),                                                   person(Name2, man, Age2),                  mother(Z, Name1),                   mother(Z, Name2),                   Age1Age2.                                        ◆ “=”的用法 :比较符和约束符               p(X, Y, Z):-Z=X+Y. 当变量X、Y、Z全部被实例化时, “=”就是比较符。 如: 对于问题           Goal: p(3, 5, 8). 机器回答: yes。 而对于         Goal: p(3, 5, 7).  机器回答: no。  但当X, Y被实例化, 而Z未被实例化时, “=”号就是约束符。 如:               Goal: p(3, 5, Z). 机器回答: Z=8 这时, 机器使Z实例化为X+Y的结果。  2.2.3 输入与输出 为从键盘输入有关数据,PROLOG一般提供专门的输入和输出谓词; (1) readln (X)   //读字符串给X (2) readint (X)   //读整数给X,若不是则谓            词失败 (3) readreal (X)   //读实数给X,若不是则谓词失败 (4) readchar (X)   //读字符给X,否,失败 (5) write (X1, X2, …,Xn)   //输出X(实例化,否则失败) W
                 原创力文档
原创力文档 
                        

文档评论(0)