Visual Prolog 的 Web 专家系统 (8)
GENI核心 -- 推理引擎(2)流量控制
1、阐述fail、“!”而回溯
与其他语言相比,,Prolog最大的特点。这是回溯机制。
回溯机制,还有的主要手段2个月,首先,通过使用谓词fail触发回溯,特别谓词“!”(读作cut)取消回溯。
Prolog运用fail引发回溯。实现程序的循环,并运用“!”对回溯进行控制。
看一个典型演示样例:
FACTS
f(integer)
PREDICATES
a()
b()
c()
CLAUSES
a():-
write("------ a -------\n"),
f(X),
writef("%\n",X),
fail.
a():-
write("a is sucsess.").
%---------------------------------------------------------
b():-
write("\n\n------- b -------\n"),
f(X),
writef("%\n",X),
!,
fail.
b():-
write("b is sucsess.").
%---------------------------------------------------------
c():-
write("\n\n------- c -------\n"),
a(),
b(),
!,
write("\nc sucsess.").
c():-
write("\nc backtracking.\n\n").
%---------------------------------------------------------
GOAL
assert(f(1)),
assert(f(2)),
assert(f(3)),
c().
在VDE中,菜单选:File|New,新建一文件noname.pro,把上边的代码贴进去
菜单选:Project|Test Goal,
执行结果。输出显演示样例如以下:
------- c -------
------ a -------
1
2
3
a is sucsess. ------- b -------
1 c backtracking. yes
程序非常easy,GOAL先把事实f(1)、f(2)、f(3)入库,接着求证c()。
Prolog把“函数调用”称作“求证(query)子目标”。
并不是Prolog矫情。别的“小语种”基本如此。
比方。函数语言Lisp、Erlang等,把“函数调用”称作“求值(evaluate)“。
还得说说”子目标“。
从理论上说,Prolog程序,由一个总目标和多个子目标构成,形成”树“逻辑关系。
GOAL是总目标,即树的根结点,子目标则是树的各层枝叶。
在本演示样例中,总目标的子目标是c(),而a(),b()则是c()的子目标。
在a()和b()中,子目标是f(X)。
这段演示样例代码的看点,主要是fail和!。
write(),writef()等管理输入输出的谓词,不是子目标。由于,它们不參与求证、推理。
要正确理解谓词子句体内子目标的关系。逗号”,“是关键。
逗号”,“的含意,是逻辑”与“,and。因此。子句体实际上是个复合逻辑推断:
比如,子句 a():- b(),c(),d(). 相当于: if a() then { if (b() and c() and d()) then a() }
这里并没写错,子句头与子句体就是这种逻辑关系。
不仅如此,分号”;“表示逻辑”或“。
比如。本例的谓词a(),2个子句能够合并写成这样:
a():-
write("------ a -------\n"),
f(X),
writef("%\n",X),
fail
;
write("a is sucsess.").
仅仅是,用分号”,“而非并列子句表示逻辑或,会造成代码难读、难懂等误会,非常不有用。
所以,在实际编程中,差点儿见不到使用分号”;“的。
如今再回到GENI的推理机流程控制这个话题上来。
上面提到的“典型演示样例”,是GENI的推理机流程控制的方法之中的一个。
当中,谓词a()中的fail,遍历了所有f(X)。
谓词b()中的 !,fail。仅仅取得第一个f(X),而且不再回溯。
谓词c()中的 ! 也非常重要。
没有它。程序编译时就会出错。
2、Prolog以先深搜索的方式求证子目标
Prolog本身就是以先深搜索的方式求证目标的推理机。
仍以上面的“典型演示样例”说事。
a(),b()。c()等三个谓词,分别都是由2个子句构成的逻辑或,or 的关系。
它他们体内条款。构成逻辑和。and 关系。
按照逻辑操作的优先级的规则。第一and后or。
然后,证明的方式来形成目标深度优先搜索。
GENI知识库rule,按道理“树”关系,与Prolog完全一致的推理机制。
和GENI推理引擎本身,这是他们的知识基础结构,量身定制,以验证机深层搜索目标。
Visual Prolog 的 Web 专家系统 (8)的更多相关文章
- 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 专家系统 (6)
保存用户响应询价.作为进一步推理的条件 或GOAL段开始.最初的一句是write_startform() write_startform():- write("<form action ...
- 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 ...
随机推荐
- 【iOS】网页中调用JS与JS注入
非常多应用为了节约成本,做出同一时候在Android与iOS上都能使用的界面,这时就要使用WebView来做.Android和IOS上都有WebView,做起来非常省事.当然这时就要考虑怎样在Andr ...
- Apache服务器学习笔记
Apache服务器知识 首先我们要知道一共有那几个程序在监听网络端口,即与网络保持活跃连接,打开CMD命令窗口 输入: netstat –an 指令就能显示出所有与网络保持连接的程序,输入net s ...
- C#利用Lambda和Expression实现数据的动态绑定
在程序开发过程中,有时为了让数据能够实时更新,我们会采用数据绑定来实现. 一般我们数据绑定时我们是这样写的 public class Helper : INotifyPropertyChanged { ...
- 2014 I/O归来:Google连接一切
6月,WWDC 2014与Google I/O (大部分演讲视频都公开.Youtube须要FQ,很值得一看)相继召开.今年是我第三年參加Google I/O大会. 三年间.Google积累了非常多技 ...
- PHP学习之-1.4 计算表达式
计算表达式 不同于HTML和CSS,在PHP中做计算,比如我们写 echo 12*3 计算结果是36.代码如下 <?php echo 12*3;?> 实例 <!DOCTYPE HTM ...
- PNG 文件结构
PNG图像文件介绍 PNG图像文件格式 PNG是可携式网络图像(portable network graphics)的英文缩写.PNG是从网络上开始发展的,目的是替代GIF和JPG格式,PNG图像文件 ...
- WPF的MVVM
一.关于WPF WPF(Windows Presentation Foundation) ,从名字来看,Microsoft想把WPF技术作为Windows程序外观(表现层)的基础.我们知道,现在开发 ...
- awk 正则表达式
awk 正则表达式.正则运算符详细介绍 前言:使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有 ...
- smartforms长文本处理方式
因为长文本的话不好换行,在smartforms中对于长文本的处理有两种:一种是自定义文本模板,自己定义好的文本格式,然后再使用的时候再文本类型中选择文本模板,最好是勾上如果没有文本存在怎无错误.这种方 ...
- mysql sql执行顺序
<pre name="code" class="html">mysql> explain select * from (select * fr ...