Visual Prolog 的 Web 专家系统 (5)

使用现成网页

再说个小伎俩。

在VIP开发环境中,可以随时测试代码,不必编译成exe文件。

比如,想看看VIP内建谓词filenameext的执行结果,可以在一空白.pro文件中写入:

GOAL
        filenameext("prolog.exe",Name,Ext),
        filenameext(NewName,"prolog.exe",".err").

然后点选菜单"Project | Test Goal",就会看到以下结果:

Name=PROLOG, Ext=.EXE, NewName=PROLOG.ERR

另外,Prolog的基本特点和用法,大致包括匹配(合一)、回溯、截断、

流模式等,在《Visual Prolog 的 Web 专家系统 (4) 》

中已有介绍,以后不再展开细说。

现在进入今天的话题,生成网页。

起点是GOAL段的语句:userdefined_startpage()

  userdefined_startpage():-
	default_startpage(FILENAME),
  	consult_htm(FILENAME,HtmlText),!,
        gethtmlbody(HtmlText,BodyText),
        write(BodyText).
  userdefined_startpage():-
	kb(KB),!,
	write("<h1>Geni Expert system</h1>\n"),
	writef("<h2>Knowledgebase: %</h2><hr />",KB).
  userdefined_startpage():-
	errorexit.

先看一下它的流程控制。

把这3个子句,分别叫做子句1、子句2、子句3吧。

1、子句1执行default_startpage(FILENAME)若失败,

回溯到子句2,若事实库中有kb(KB),

运行完子句2,子句3没有机会再执行;

2、若子句2,事实库中没有kb(KB),

回溯到子句3,程序报错退出。

3、子句1执行consult_htm(FILENAME,HtmlText)成功后,

接着执行完全部语句,写出网页body部分,

并发生截断,子句2、子句3没有机会再回溯执行;

下面看子句1中的几个语句。

default_startpage(FILENAME)

它是事实库geni中的一条事实,上一节(《Visual Prolog 的 Web 专家系统 (4) 》)

中已有介绍,它出自animal.gni,FILENAME = "animal.htm"

consult_htm(FILENAME,HtmlText)

consult_htm(FileName,HTMLTEKST):-
	syspath(ExeStartupPath,_ProgName),
	filenamepath(FullName,ExeStartupPath,FileName),
	trap(file_str(FullName,HTMLTEKST),_,writef("File % is not found! Correct problem!\n",FullName)),!.
  consult_htm(_,""):-
	errorexit.

2个谓词syspath和filenamepath,上节已有介绍。

trap(file_str(FullName,HTMLTEKST),_,writef("File % is not found! Correct problem!\n",FullName))

在我的机器上,FullName = "d:\\apache2.2\\htdocs\\geni\\animal.htm"

执行file_str的结果,是把该文件的内容,存入变量HTMLTEKST

VIP内建谓词writef是格式化输出。内容是:

File d:\apache2.2\htdocs\geni\animal.htm is not found! Correct problem!

以下是对trap的介绍。

内建谓词trap( PredicateCall, INTEGER ExitCode, ErrorPredicate)

流模式是(i, o,i)

用于捕获程序的退出、中断和运行时错误。

调用的子句PredicateCall的成败,导致trap的成败。

ErrorPredicate是报错的谓词调用。

write(BodyText)

把网页body的内容写入CGI。今天的任务完成。

Visual Prolog 的 Web 专家系统 (5),布布扣,bubuko.com

时间: 2024-08-01 10:45:05

Visual Prolog 的 Web 专家系统 (5)的相关文章

Visual Prolog 的 Web 专家系统 (10)

GENI的核心 -- 推理机(4)求证过程分析 1.GENI知识库结构 专家系统推理机的设计运行,与其知识库结构紧密相关. GENI知识库结构是一棵逻辑推理树.根节点是animal,即求证的目标. Animal有2个子节点,即求证的子目标.节点或子目标,用rule表示.例如: rule(8,"animal","mammal",[12,13],"") rule(9,"animal","bird",[9,14]

Visual Prolog 的 Web 专家系统 (7)

GENI的核心 -- 推理机(1)知识表示 GOAL段最后一句是子句infer(),它的含意是"推理". 由此,进入GENI的核心,察看推理机的运行. infer() infer():- topic(Maingoal,_), go([],MainGoal,""),!. infer():- errorexit. topic(Maingoal,_) topic现存于事实库geni中,取出的Maingoal = "animal", 详见<Visu

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\&q

Visual Prolog 的 Web 专家系统 (3)

深入探究WEB GENI源程序 折腾WEB GENI的目的,是为了摸清它的结构设计.运行机制,为山寨出自己的专家系统外壳,积累经验,启发思路. 为此,必须深入细致地研读源程序代码. WEBGENI包括2个模块:geni.pro和cgitools.pro.前者是主程序,负责推理.生成网页等:后者负责相对底层的CGI数据处理.本文探究的对象,主要是geni.pro. Visual Prolog(以下简称VIP)程序由几种代码段构成: PREDICATES :谓词段.相当于C语言的函数声明 CLAUS

Visual Prolog 的 Web 专家系统 (4)

知识库操作 先说个小伎俩. 在VIP中打开geni.prj,菜单选Options,打开Application Expert,点击Other Options, 点击Project Directories,点击Output,在Final文本框填入d:\Apache2.2\htdocs\GENI 这个目录是GENI虚拟主机所在之处. 这样做的目的,是编译后geni.exe会自动存入上述目录,省去了人工搬运的麻烦. 开始今天的话题,进行知识库操作. 下一步是执行GOAL段的子句consult_kb(Pa

Visual Prolog 的 Web 专家系统 (8)

GENI的核心 -- 推理机(2)流程控制 1.细说fail."!"与回溯 与其他语言相比,Prolog最大的特点,是它的回溯机制. 回溯机制,主要手段有2个,一是用谓词fail引发回溯,二是用特别谓词"!"(读作cut)取消回溯. Prolog运用fail引发回溯,实现程序的循环,并运用"!"对回溯进行控制. 看一个典型示例: FACTS f(integer) PREDICATES a() b() c() CLAUSES a():- write

Visual Prolog 的 Web 专家系统 (9)

GENI的核心 -- 推理机(3)一些谓词 为了集中注意力,较好地分析GENI推理机核心程序,应该做些准备工作,弄明白一些起辅助作用的谓词功能. is_htmlfile(Rulexpl) is_htmlfile(FILE):- filenameext(File,_Name,Mask), Mask = ".htm",!. is_htmlfile(FILE):- filenameext(File,_Name,Mask), Mask = ".html",!. 如果FILE

Visual Prolog 的 Web 专家系统 (2)

Web 专家系统 WWWGENI 在目录<VIP_root>\WWW\Programs\GENI中,有个例程,展示如何创建在WEB服务器支持下,以CGI脚本方式在因特网上工作的小型专家系统. GENI 使用极为简单的规则表示知识,当满足某些条件时,适用这些规则. rule(1,"carnivore","cheetah",[1,2],"") rule(2,"carnivore","tiger",[

Visual Prolog 的 Web 专家系统 (11)

GENI的核心 -- 推理机(5)处理why问题 1.why问题由客户从浏览器提出 专家系统工作时,需要向用户提出问题,收集推理求证用的事实根据. 用户有时想知道,系统为什么提出这样的问题,要求系统给出解释.这就是所谓的why问题. why问题的提出,是按动网页按钮"why"的结果. 2.why功能的设置 GENI的第一个页面default.htm并没有按钮"why".它的设置过程是这样的: 从上一节的谓词check第3子句说起. check( RNO, HISTO