Visual Prolog 的 Web 专家系统 (6)
保存用户响应询价。作为进一步推理的条件
或GOAL段开始。最初的一句是write_startform()
write_startform():-
write("<form action=\"\cgi-bin\geni.exe\"method=\"post\">\n").
注意!上一句应为write("<form action=\"geni.exe\"method=\"post\">\n").
GENI虚拟主机没有“cgi-bin”这个子文件夹。
在GOAL中,紧跟上一句的是assert_conditions(ParmList1)
assert_conditions([]):-!.
assert_conditions([parm(Name,Val)|Rest]):-
concat("cond_",CondNumberStr,Name),
str_int(CondNumberStr,COND),
!,
assert_cond(COND,Val),
assert_conditions(Rest).
assert_conditions([_Parm|Rest]):-!,
assert_conditions(Rest).
assert_conditions(_):-
errorexit.
Prolog没有C语言的for,while等处理循环的机制。
本例,Prolog是用递归来实现“循环”。
谓词assert_conditions的4个子句,表现了典型的、标准的递归应用。
子句1,设置递归终止条件。
终止条件是要处理的列表为空。
子句2,处理列表头,即列表第1个成员。
子句3。忽略要处理的列表头,继续处理剩余表尾。
子句4,准备出错后的处理。
子句4运行的前提条件是:
1、子句1头部匹配不成功,或者。“截断”! 之前的语句失败。
2、而且,子句2头部匹配不成功。
详细是哪个语句失败,以及失败的原因。待以下分析。
子句2和子句3,末尾的语句都是自身的递归调用。
这就是尾递归。
尾递归的优点。是能够无限递归下去,不会耗尽内存。
看看子句1中的语句吧。
concat("cond_",CondNumberStr,Name)
它是内建谓词,流模式是(i, i, o), (o, i, i), (i, o, i), (i, i, i)
用于连接2个字符串
本例的流模式是 (i, o, i)。从变量名上看,CondNumberStr应该是数字
所以。若Name="cond_3" ,则CondNumberStr=3
这时,能够试试上一节的小伎俩:
在VDE中。菜单File|New,出现一空白文件noname.pro。写入:
goal
concat("cond_",A,"cond_1").
菜单Project|Test Goal。目标编译运行。结果:
A=1
1 Solution
再看下一条语句
str_int(CondNumberStr,COND)
这是个内建谓词:str_int (STRING StringArg, INTEGER IntArg)
流模式是(i, o), (o, i), (i, i)
用于字符串与整数的相互转换
建议用上述小伎俩试一试
这一句之后,便是截断"!"。由此可见,引起子句2回溯到子句3的条件是:
1、变量Name不是以“Cond_”开头的字符串,或者,
2、变量CondNumberStr不是数字字符串。
这一回溯引起子句3的运行,结果是忽略当前处理对象,開始新的递归,
处理列表中的后序对象。
继续往下看:
assert_cond(COND,Val)
assert_cond(CNO,"yes"):-!,assert(yes(CNO)).
assert_cond(CNO,"no"):-!,assert(no(CNO)).
assert_cond(_CNO,"why"):-!,assert(whymeet).
assert_cond(_,_):-errorexit.
CNO是知识库里“条件”的标识号
yes(CNO),no(CNO),保存在事实库tmp里。
意思是:对第CNO号条件,回答了yes/no
whymeet,也是保存在事实库tmp里,
意思是:用户要求系统答复。为什么询问这一问题。
最后一句,assert_conditions(Rest).
递归处理列表的尾巴Rest。
今天的重点是尾递归,也是Prolog一个主要特征。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Visual Prolog 的 Web 专家系统 (6)的更多相关文章
- Visual Prolog 的 Web 专家系统 (1)
用Prolog敲代码,感觉舒坦. Prolog的编程范式,抽象程度远高于中.低级别的C语言等.敲代码的源码长度,至少比C语言的节省50%. 并且,Prolog的语法简单,符号选择自然合理,养眼度远高于 ...
- Visual Prolog 的 Web 专家系统 (7)
GENI核心 -- 推理引擎(1)知识表示 GOAL最后一句是谓语infer(),它的含义是"论证". 因此,,进GENI核心,执行视图推理引擎. infer() infer(): ...
- Visual Prolog 的 Web 专家系统 (9)
GENI的核心 -- 推理机(3)一些谓词 为了集中注意力.较好地分析GENI推理机核心程序,应该做些准备工作,弄明确一些起辅助作用的谓词功能. is_htmlfile(Rulexpl) is_htm ...
- Visual Prolog 的 Web 专家系统 (8)
GENI核心 -- 推理引擎(2)流量控制 1.阐述fail."!"而回溯 与其他语言相比,,Prolog最大的特点.这是回溯机制. 回溯机制,还有的主要手段2个月,首先,通过使用 ...
- Visual Prolog 的 Web 专家系统 (10)
GENI的核心 -- 推理机(4)求证过程分析 1.GENI知识库结构 专家系统推理机的设计执行,与其知识库结构紧密相关. GENI知识库结构是一棵逻辑推理树. 根节点是animal,即求证的目标. ...
- Visual Studio 2013 Web开发
cnbeta新闻:微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Ser ...
- VSS提示"Could not find the Visual SourceSafe Internet Web Service connection information for the specified database
转自:http://www.cnblogs.com/qqflying/archive/2007/12/18/1004051.html VSS连接错误提示: ====================== ...
- Visual Studio的Web Performance Test提取规则详解(3)
总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...
- Visual Studio的Web Performance Test提取规则详解(2)
总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...
随机推荐
- 概率dp专辑
求概率 uva11021 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 强联通块tarjan算法
http://poj.org/problem?id=1236第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题1 ...
- Google Map API V2密钥申请
之前用的都是v1,用的是MapView,好吧,仅仅能认命了.废话不再多说,開始android 的Google Maps Android API v2吧 之前參考了http://www.cnblogs. ...
- Excel阅读器NPOI
什么是NPOI? NPOI 它是 POI 项目的 .NET 版本号. POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就能够在没有安装 Office ...
- [置顶] android系统如何在静音模式下关闭camera拍照声音(2)
之前写过一篇“android系统如何在静音模式下关闭camera拍照声音”的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍照声音的关闭和开启. ...
- VS2008下直接安装Boost库1.46.1版本号
Boost图书馆是一个移植.提供源代码C++库.作为一个备份标准库,这是C++发动机之间的一种标准化的过程. Boost图书馆由C++图书馆标准委员会工作组成员发起,一些内容有望成为下一代C++标准库 ...
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(一)
1.1 摘要 现今,智能手机操作系统不能有效的提供给用户足够的控制权并且很清楚的了解到第三方的应用程序是如何使用其的隐私数据.我们使用了TaintDroid来阐明这个缺点,其是一个高效的,全系 ...
- 重新想象 Windows 8 Store Apps (8) - 控件之 WebView
原文:重新想象 Windows 8 Store Apps (8) - 控件之 WebView [源码下载] 重新想象 Windows 8 Store Apps (8) - 控件之 WebView 作者 ...
- 3D MAX脚本教程1
本文转载自http://jiurong995294.blog.163.com/blog/static/195133243201192531546490/ 方便以后须要时候使用 为什么要学习3D MAX ...
- _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...