- 1、本文档共139页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Prolog语言是一种典型的逻辑程序设计语言。
5.6.3 参数传递 PROLOG语言与外部过程是用堆栈来传递参数的。对汇编语言、PASCAL和FORTRAN语言,其自变量是按它们出现的顺序存放在堆栈中的,而大多数c编译程序产生的子程序希望按相反的顺序找到它们的自变量,所以对c语言的参数传递是按相反的顺序压进堆栈的(也有少数c编译程序是按其他方式传递参数的,因此,苦选用C语言,则应确认编译程序究竟是按什么顺序传递参数的)。 5.6.3 参数传递 PROLOG语言中的每种数据类型,在存储器中是以某种具体形式表示出来的。表6.1给出了各种数据类型及其存储方式。当字符、整数或实数型参数从PROLOG语言传递到子程序时,实际上压入堆栈的是其数值;而对符号、字符串或复合型的参数,则是其地址被压进堆栈。由此须注意的是:当外部子程序存在着返回参数给PROLOG语言,则必须在输出参数指向的地址处,由PROLOG语言装入一数值。 5.6.3 参数传递 5.6.3 参数传递 每当PROLOG语言调用外部过程时,传递参数的压栈顺序是:任何自变量都按压进堆栈,接着BP寄存器的当前值压进堆栈,然后退回地址压进堆栈。这样的信息排列,称为激活记录。使用者应知道每段信息位于何处,以便对自变量能正确存取。返回地址在堆栈中总要占4个字节EBP寄存器的当前状态需要2个字节表示;而对输人参数,其字节大小将取表6.1所列的数值,对输出参数则是取4个字节。 5.6.3 参数传递 5.6.4 外部C语言子程序 从表6.1可看出,字符、整数和实数型是直接将输人参数的值传递到堆栈,而字符串、符号和复合型是将其地址压进堆栈。这意味着字符、整数或实数型的传递参数将作为c语言的int、flaot和char的数据类型来处理;而对字符串、符号和复合型的传递参数,则要用c语言的char *数据类型——指针(或是指向复合结构的指针)来处理,因为只有地址(指针)能传递到c语言子程序。所有的返回参数必须使用相应的指针类型。 5.6.4 外部C语言子程序 如下面的函数是将两实数相乘,并以第三个参数返回结果。 mul (a, b, c) float a,b; float *c; { *c=a*b;} 所用的C编译程序必须使用32位指针(有些编译程序可能将此条件看成“大存储器模式选择”),许多c编译程序允许在16位和32位指针之间选择,因此要确认选择是正确的。如果编译程序不能以32位指针方式工作,它就不能与PROLOG语言相连接。 5.6.4 外部C语言子程序 下面的命令行是连接C模块与PROLOG模块: LINK INIT + P + C + P.SYM,PROGRAME,PROLOG十CLIB 其中P表示PROLOG代码,C表示C代码。一般C语言库函数被包括在库函数清单里,大多数C编译程序将调用函数库CLIB。 5.6.5 两个限制 当用字符串或符号作为输出参数时,必须注意两条特定的重要限制。 (1)PROLOG语言仅当字符串变量被约束之后,才对其分配存储空间。因此,下列代码段将不能正确操作,并且可能会使你的计算机“Down”机。 C语言代码段: global predicates strcpy(string, string) – (i, o) language C …… 5.6.5 两个限制 PROLOG语言代码段: clauses start:- A=“this is test”, strcpy(A,B), write(B). strcpy是c语言的标准字符串拷贝函数(strcpy函数仅将字符串A的内容拷贝到变量B里去)。之所以这个代码段不能完成拷贝,是因为变量B在调用时没有被约束为任何值,因此系统对它没有分配存储空间,即它的指针无所指。 5.6.5 两个限制 当strcpy准备拷贝字符串A的内容到变量B时,strcpy将会把它们放到内存的某一随机点上——这很可能会导致程序死去。克服这一问题的惟一办法是在调用前,系统先将一哑值约束到变量B中。这样系统就会分配存储空间给变量B,以便字符串拷贝函数能正常工作。当然,将变量B约束为一值,就意味着strcpy的说明必须改为两个输入参数。这种方法看起来似乎奇怪,但是,这是对这种类型操作的惟一途径。修改
您可能关注的文档
- i湖南长郡卫星远程学校.ppt
- JAVA开发规范V1.2.doc.doc
- IPV6技术及产品进展汇报Huawei-3Com-上海交大IPv6.ppt
- Internet的接入技术.ppt-UpTo.ppt
- Iu无线接入网络应用部分-Read.doc
- jgy网站规划与建设第一章.ppt-中国网页设计.ppt
- Java编程基础编程能力-沈阳职业技术学院.ppt
- JYR-40恒流电源-直流电阻测试仪.doc
- ISOIEC17025认可证书CNAS-PD2009-B2机构名称湖南省计量.doc
- JSZC-J2016-018手机信号智能侦测屏蔽系统竞争性-江苏政府采购网.doc
- 小学生重阳节作文300字范文【10】.docx
- 2025年中国嵌埋铜块PCB行业市场发展现状及投资规划建议报告.docx
- 2020-2025年中国镍矿行业发展前景预测及投资战略研究报告.docx
- 2020-2025年中国稀土永磁材料行业发展潜力分析及投资方向研究报告.docx
- 7.3 溶液的酸碱性 大单元教学设计 鲁教版化学九年级下册.doc
- 2021-2026年中国不锈钢五金市场竞争格局及投资战略规划报告.docx
- 中国金属标准件紧固件行业市场调研分析及投资前景预测报告.docx
- 小学科学如何在问题导学下促进学生主体探究.docx
- 小学科学学困生成因及转化策略研究开题报告.docx
- 2025年中国石墨矿市场竞争格局及行业投资前景预测报告.docx
文档评论(0)