Visual Prolog 的 Web 專家系統 (11)

來源:互聯網
上載者:User

標籤:style   color   資料   io   for   問題   

GENI的核心 -- 推理機(5)處理why問題

1、why問題由客戶從瀏覽器提出

專家系統工作時,需要向使用者提出問題,收集推理求證用的事實根據。

使用者有時想知道,系統為什麼提出這樣的問題,要求系統給出解釋。這就是所謂的why問題。

why問題的提出,是按動網頁按鈕“why”的結果。

2、why功能的設定

GENI的第一個頁面default.htm並沒有按鈕“why”。它的設定過程是這樣的:

從上一節的謂詞check第3子句說起。

  check( RNO, HISTORY, [CNO|REST] ):-cond(CNO,TEXT,OPTIONS),!,inpq(HISTORY,RNO,CNO,TEXT,OPTIONS).

這時的cond是未經求證的條件,即不存在yes(CNO)和no(CNO)的事實,於是,開始求證子目標inpq。

inpq(HISTORY,RNO,CNO,TEXT,OPTIONS)
  inpq(HISTORY,RNO,CNO,TEXT,_):- whymeet,!,gen_why(HISTORY,RNO,TEXT,CNO),endpage_Why(),exit.  inpq(_HISTORY,_RNO,CNO,TEXT,""):-!, write("\nIs it true that: ",TEXT,"\n<BR>"),format(CONDSTR,"cond_%",CNO),endpage(CONDSTR), exit.  inpq(_HISTORY,_RNO,CNO,TEXT,FILENAME):-is_htmlfile(FILENAME),!,  consult_htm(FILENAME,HtmlText),               gethtmlbody(HtmlText,BodyText),               write(BodyText),write("\nIs it true that: ",TEXT,"\n<BR>"),format(CONDSTR,"cond_%",CNO),endpage(CONDSTR),!,exit.  inpq(_HISTORY,_RNO,CNO,TEXT,PICTURE):- write("\nIs it true that: ",TEXT,"  ",PICTURE,"\n"),format(CONDSTR,"cond_%",CNO),endpage(CONDSTR),!,exit.

Inpq的第1子句,處理why問題,產生專門網頁。下面將有介紹。

Inpq的第2、3、4子句,共同之處,都設定了進一步的提問求證和why功能。不同之處,只是顯示網頁的方法各異。

why功能的實際設定,在謂詞endpage。

endpage(CONDITION)

Endpage前面已有介紹,不再重複囉嗦。只是強調一下其第2子句中,設定why問題。

writef("<Input type=\"BUTTON\" value=\"Why\" onclick=\"form.%s.value=‘why‘;submit()\">\n",CONDITION),

CONDITION的值為cond_X,X是數字。假設X=15,在按鈕“why”後,form.cond_15.value=‘why’。

這一變數,決定了whymeet進入事實庫。

whymeet進入事實庫

前面小節中已經介紹過,cond_15=why這種CGI資料,會整理成parm(“cond_15”,”why”)這種樣子。

經過GOAL的assert_conditions求證,來到assert_cond(“cond_15”,”why”)的求證:

  assert_cond(CNO,"yes"):-!,assert(yes(CNO)).  assert_cond(CNO,"no"):-!,assert(no(CNO)).  assert_cond(_CNO,"why"):-!,assert(whymeet).  assert_cond(_,_):-errorexit.

第3子句,將whymeet存入事實庫。

3、why問題的處理

上述謂詞inpq的第1子句,負責處理why問題。

  inpq(HISTORY,RNO,CNO,TEXT,_):- whymeet,!,gen_why(HISTORY,RNO,TEXT,CNO),endpage_Why(),exit.

事實whymeet的存在,說明使用者在瀏覽器按下了按鈕“why”,提出了這個問題。往下接著看gen_why和endpage_Why。

gen_why(HISTORY,RNO,TEXT,CNO)
gen_why(HISTORY,RNO,_TEXT,_CNO):-write("Why<BR>\n"),rule( RNO, Mygoal1, Mygoal2, _ ,_),!,sub_cat(Mygoal1,Mygoal2,Lstr),concat("I try to show that: ",Lstr,Lstr1),concat(Lstr1,"<BR>\nBy using rule number ",Ls1),str_int(Str_num,RNO),concat(Ls1,Str_num,Ans),show_rule(RNO,Lls1), concat(Ans,Lls1,Ans1),report(HISTORY,Sng),concat(Ans1,Sng,Answ),write(Answ),nl.  gen_why(_HISTORY,_RNO,_TEXT,_CNO):-errorexit.

show_rule和report,以及endpage_Why都是外建謂詞,主要用於顯示網頁的內容,不再介紹。其餘的內建謂詞,前面幾節有過介紹,不再重複。

一點建議

直到寫完小節(10),才發現VIP的目錄EXAMPLES裡有單機版的GENI。

由於沒有CGI處理HTML顯示等問題,程式邏輯簡單許多,更適合學習研究。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.