Prolog 與 WordNet (1)

本文翻譯的原作,是 Sarah Witzig 寫的 《 Accessing WordNet from Prolog 》。用 Prolog 操作 WordNetWordNet 是個語義網路系統,開發人員是普林斯頓大學。本文詳細介紹 Prolog 版本的 WordNet

Eresye製作的專家系統(玩具示範用)

Erlang麾下有一群“大將”,其中一員便是Eresye,專司“專家系統引擎”。Eresye統帥一支輕騎兵,裝備精良,武藝高強。Eresye匯出的內建函數,僅僅10個左右,能以極快速度搭建起專家系統的架構,並憑藉Rete演算法的優勢,使系統高速運行。最近,領教了Eresye的強大威力,得把感受記下來。一來作個總結,二來想看看是不是真弄明白了。一直以為,明白的標誌,一是能把複雜的問題簡單說清,二是要白紙黑字用筆來說。用Eresye做了個專家系統模型,雖然十分簡陋,屬於玩具示範類,沒有實用價值,但從

Erlang 中文簡體字 GB2312 轉 unicode 的辦法(3)

改了改程式,包括標點和其他符號,GB2312 的全部字元,都轉換成了unicode。def all_chars(): s = '''-module(gb2u).-export([start/0,get_unicode/2]).get_unicode([],U) -> lists:reverse(U);get_unicode([A|T],U) when A < 128 -> get_unicode(T,[A|U]);get_unicode([A,B|Z],U)

Pyke 邏輯編程入門(13):知識庫

知識庫 知識庫是有名稱的、儲存結構化知識的“倉庫”。知識庫象硬碟上的檔案目錄,但知識庫結構不能嵌套。因此,知識庫裡的知識單元,有兩層結構的名稱:知識庫名.知識單元名。 在某一 網頁伺服器程式裡,可能看到一些事實的例子:

Pyke 邏輯編程入門(5):模式比對 之“模式變數”

模式變數 進一步說,你或許要問:“誰是 Thomas 的 Norma 的兒子?”。這時,你把 Thomas 和 Norma 輸入 Pyke,要它的回答多點內容,不僅僅是“對”、“錯”。 模式變數用做輸出變數。形式上以貨幣符號 $ 開頭: family.son_of($son, Thomas, Norma) 在符號 $ 後面,可以用任何名字。Pyke 會正確地把 $son 約束成 Bruce。你若對此回覆不滿意,可以拒絕它,並要求 Pyke 給出新的回答(“不行,請繼續尋找!”)。 Pyke

Mnesia 學習筆記(2)

 2、Mnesia 入門一個示範用的資料庫例子。這個例子以後還會用到,也會做些修改。首先要做以下事情:● 啟動Erlang會話,指定Mnesia資料庫的位置● 初始化資料庫結構● 啟動Mnesia,建立所需資料表格2.1 第一次啟動 Mnesia開啟DOS命令控制台視窗,執行這句:D:/Program Files/erl5.6.5/bin > erl -mnesia dir '"d:/erlang/learn/db/"'進入Erlang的shell,執行語句:Eshell V5.6.5  

Pyke 邏輯編程入門(14):知識庫之“事實庫”

事實庫 Pyke 把事實陳述儲存在事實庫裡。存入的事實組織成結構化的,並且不限數量。事實庫按照斷言的新事實的需要,自動建立。 事實 設想一個事實陳述語句。它有個名字和一組參數。參數可以是: 字串 標示符不需要引號,例如 Fred 與 'Fred' 相同。 數字 None, True, False 以上各種參數組成的元組。元組可以嵌套。單個成員的元組,不需要逗號,(1) 與 (1,) 相同。 不允許存在重複的事實。斷言已有事實的試圖,自動忽略。但要注意,只有參數全部相同的,才是重複的事實。 目前,

Pyke 邏輯編程入門(6):模式比對 之“元組模式”

元組模式 元組模式只與元組合一匹配。它形式上是在圓括弧中,成員由逗號隔開的模式列表: (1, $x, "buckle my shoe") 你可把元組的最後那個變數,用星號(*)修飾成“其餘模式”: ($a, fie, $b, *$c) 這個“其餘模式”的變數,總是約束為元組。 例如: (1, $x, "buckle my shoe") 與 (1, 2, "buckle my shoe") 合一匹配,$x 約束值等於 2。 (1, $x, "buckle my shoe") 與 (1, 2,

Erlang程式樣本(2):高階函數 fun

2、高階函數 fun 2.1 樣本 1 :映射 map map(F, [H|T]) -> [F(H)|map(F, T)];map(F, [])    -> [].double(L)  -> map(fun(X) -> 2*X end, L).add_one(L) -> map(fun(X) -> 1 + X end, L).2.2 樣本 2 :迴圈 foreachforeach(F, [H|T]) ->    F(H),    foreach(F,

Pyke 邏輯編程入門(15):知識庫之“規則庫”

規則庫 規則庫是規則的集合。建立規則庫,就是用你喜歡的文字編輯器,編寫 .krb 規則檔案。 規則庫中,可同時包含正向和反向兩種推斷規則。 為了斷言新事實而啟用規則庫時,正向推斷規則即自動運行。可見,正向推斷規則不直接用於確定具體事實是否真實。 反向推斷規則,直接用於確定某一具體規則的真實性。因此,如果一個事實陳述的名稱中,包括知識庫名字(更確切地說,是規則庫的類型名稱),那麼,它是這個規則庫裡的反向推斷規則。 注 意 Pyke 首先運行正向規則,然後運行反向規則。

Pyke 邏輯編程入門(7):模式比對之“兩個模式的匹配”

兩個模式的匹配你已經見過不同類型的模式,及其如何與資料匹配合一。 模式用於產生事實(陳述)。一種方式是通過詢問得到事實,即模式與資料匹配。 產生事實的另外一種方式,是使用規則。以後再解釋它。 應用規則,即需要模式與資料的匹配,也需要模式之間的匹配。 在討論規則問題之前,需要弄清兩個模式是如何匹配的。 簡單地說,全靠模式變數。模式變數不僅可以約束成資料,也會約束成別的模式。 約束成文字模式把模式變數約束成文字模式,就像把它約束成文字模式中的資料。僅此而已。 約束成別的模式變數若模式變數A約束成B,

Erlang 的 unicode 半截子工程

下載了新版的Erlang/OTP R13B,重點試了試新增的unicode支援和wxErlang。不象一些中文介紹說的那樣樂觀,我的測試結果不太好。unicode的支援,只解決了eshell裡的問題,即在erl和werl這兩個工具中,已經能夠正確解碼,io:format已經支援多位元組編碼。編譯器erlc仍然不支援多位元組unicode,使用者程式編譯後,無法簡便地顯示多位元組unicode。測試結果如下:一、eshell的表現Eshell V5.7.1  (abort with

Pyke 邏輯編程入門(16):知識庫之“問題庫”

問題庫“問題庫”是為程式客戶準備的。這些“問題”可以類型不同,如 “是/否?”、“選擇第幾個?”等等。問題可能帶有變數參數,在向客戶詢問時,以參數值替代問題中的文字內容。不同的參數值構成不同的問題。 對問題的回答,全部自動記錄下來。如果有幾個規則詢問同樣的問題,客戶只需回答一次。推理引擎重啟時,這些回答全部清除。 “問題”可以附帶些評審意見等資訊。這是事先預備的,並有變數參數配合。根據客戶的回答,自動顯示這些附帶資訊。 KQB 檔案 這些問題,在 .kqb 檔案中定義。問題庫的名稱,是副檔名為

GNU Prolog 的數組

GNU Prolog 的數組Prolog 的設計發明人是法國馬賽大學的學者。為了維護其語言純粹和學術特點,原始的 Prolog 沒有數組,沒有顯式的資料類型。對於使用 prolog 的實際需要來說,這未必件好事情,因為,在不少情況下,程式跑得太慢了。比如,在 C 語言中的數組,可以方便地用下標定位檢索資料,如 array1[3],array2[5][7] 之類。做同樣的事情,在 Prolog 裡很麻煩,運行效率低下。如,檢索一維list第N個成員的值,必須從第一個成員挨個掃描到N:array1(

Pyke 邏輯編程入門(8):模式比對之“病理學問題的答案”

病理學問題的答案這是下面問題的答案: 一個病理學的問題下列兩個元組模式比對合一之後,其中模式變數 $y 約束的值是什麼: 元組模式 A: ((ho, $_, ($a, $a)), ($a, $a, $b), ($a, *$b)) 元組模式 B:($x, $x, $y) 問題答案讓我們一步一步地對兩個元組模式的成員進行匹配合一。 (ho, $_, ($a, $a)) 與 $x 匹配。匹配成功:$x 約束成 (ho, $_, ($a, $a))($a, $a, $b) 與 $x 匹配。由於 $x

Pyke 邏輯編程入門(17):知識庫之“特別庫”

特別庫 只有一個“特別的”知識庫,名叫 special。 特別知識庫裡裝的是各種輔助性知識,以有趣的形式,確定陳述是否真實。 特別庫裡的知識項是 Python 函數,在程式運行中做些“特別”的事情。 這些“特別”的函數是: 函數 claim_goal 函數 check_command 函數 command 函數 general_command 函數 Claim_goal 函數 claim_goal 沒有參數。 special.claim_goal()它的行為方式,像是 Prolog 的 cut

Pyke 邏輯編程入門(9):規則

規 則從概念上講,規則很簡單: if A B C thenD E 它的意思是:“如果A、B、C是真的,則D、E也是真的”。通常叫做 if-then 規則。 A、B、C、D、E 是什嗎? 它們是簡單的事實陳述。具體地說,它們是以模式為參數的廣義的陳述語句。以後會有更多的解釋。 規則的 if 和 then 這兩部分,包含著一個或多個事實或目標,即廣義的陳述語句。 處理 if 子句中的“前提條件”在 if 子句中的前提條件,是廣義陳述句,它們與已知的一個或多個事實相匹配。 Pyke

wxErlang 的案例學習(1)

這些天,一直在鼓搗wxWidgets。裝上了code::blocks,學了bakefile,為的是輔助使用wxErlang。前期的鋪墊告一段落,正戲開場。一直以為,學習也要講效率,學以致用,沒用的不學。要真正做到這點,不難,集中精力學習examples就行。examples集中了知識精華,展示了技術訣竅,是把握關鍵技術的捷徑。學習examples,全面深入地琢磨程式的運行機制,有助於理解掌握技術細節。挑選的案例,是erl5.7.1/lib/wx-0.98.1/examples/sudoku。其中

Pyke 邏輯編程入門(3):模式比對

模式比對模式比對有點讓人陌生,慢慢來熟悉吧…… 模式比對有兩個方面:你編寫出來的模式,和 Pyke 據此進行的匹配。 一句話,模式主要用兩種基礎材料製造:文字模式。匹配對象是一模一樣的值,即其自身。 模式變數。匹配的可以是任何對象(包括其他模式變數)。 還有一種複合模式:元組模式。匹配對象是元組。

說說wxErlang的智力遊戲Sudoku

Sudoku,從這怪怪的英文就會看出,它是日語的音譯。中國人早先叫它“九宮格”,現在不少人叫它“數獨”。Sudoku從整體上看,是 9 X 9 的盤格;從局部看,是9個3 X 3 的盤格(區)組成的。Sudoku的遊戲規則非常簡單。全盤的每一行、每一列,必須也只能填進9個數字,即1、2、3、……、9;每行每列的數字,必須完全不同,不允許出現重複數字;每個小區(3 X 3

總頁數: 61357 1 .... 18202 18203 18204 18205 18206 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.