天天看點

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

資料簡化DataSimp 今天

資料簡化DataSimp導讀:在自然語言處理、知識工程和知識簡化中,我們通過知識庫來處理某些概念和實體關系,其中常用到遞歸。本文簡單舉例java遞歸和prolog最簡單的遞歸程式設計代碼。然後介紹統一化邏輯程式設計的進階計算機語言Prolog官網特征。下期繼續介紹邏輯推理涉及到的基礎概念,如邏輯學、邏輯推理、遞歸、遞推、循環、疊代、周遊等;介紹其程式設計開發語言中的相應代碼。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(24555字)

目錄

A  邏輯學形式化及遞歸的prolog程式設計(4860字)

1. 邏輯學形式化方法簡介

2. SWI-Prolog的遞歸

B  邏輯程式設計語言Prolog簡介(18718字)

1. SWI-Prolog

2. Prolog

參考文獻(1227字)

Appx(1236字).資料簡化DataSimp社群簡介

A  邏輯學形式化及遞歸的prolog程式設計(4860字)

邏輯學形式化及遞歸的prolog程式設計

文|秦隴紀,資料簡化DataSimp©20190126Sat

1. 邏輯學形式化方法簡介

邏輯學是研究思維的學科。思維有内容和形式兩個方面。思維内容指思維所反映的對象及其屬性;思維形式指用以反映對象及其屬性的不同方式,即表達思維内容的不同方式。形式性上思維分:感性具象思維(感官感覺到的具體)、抽象邏輯思維(抽象概念為形式)、理性具象思維。從邏輯學角度看,抽象思維的三種基本形式是概念、命題和推理。邏輯和邏輯學的發展,經過了具象邏輯、抽象邏輯、對稱邏輯(具象與抽象相統一)三大階段。

1.1 形式化方法(formal methods)

形式化方法(formal methods)在邏輯科學中是指分析、研究思維形式結構的方法。它把各種具有不同内容的思維形式(主要是命題和推理)加以比較,找出其中各個部分互相聯結的方式,如命題中包含概念彼此間的聯結,推理中則是各個命題之間的聯結,抽取出它們共同的形式結構;再引入表達形式結構的符号語言,用符号與符号之間的聯系表達命題或推理的形式結構。

例如,把全稱肯定命題,用符号形式化為“SAP”;把聯言命題、假言命題分别形式化為:“p∧q、“p→q”。

又例如:一個具體的假言聯言推理“如果這種金屬是純鋁,那麼它的實體性質必與純鋁相同;如果這種金屬是純鋁,那麼它的化學性質必與純鋁相同;但這種金屬的實體性質和化學性質與純鋁不相同;是以,它不是純鋁。”

這個推理的形式結構是:“如果p,則q;如果p,則r;非q且非r;是以非p。”

可進而形式化為下列公式:((p→q)∧(p→r)∧┐q∧┐r→┐p。

從古至今,中國人的通病是不關心“推理”的内在意義,即其形式化邏輯的嚴謹性,而是按照名人名言做所謂的“國文引用推理”,極其幼稚膚淺。随着資訊時代的發展,推理的意義逐漸地被擴大化,随意的國文濫用使其詞義模糊、更加不嚴謹。推理的學術含義,即學術推理,來自于這個詞的根本——它是理性世界的産物,是極符合科學的一種象征,不帶一絲幻想,不帶一點藝術感。它所要求的極嚴密的邏輯性,被學者們奉為是帶動世界發展最有利的手段,是科學理論、哲學理論的基石。

描述邏輯是一種知識表示的形式化語言,是一階邏輯的可判定子集。是否采用形式化方法,這是存在于廣義語言邏輯與狹義語言邏輯之間的激烈論争。采用近世代數和時序邏輯的方法定義了形式化描述語言,并形式化地描述了密碼協定的分層安全需求。

Description logic is a formal language for representingknowledge and it is a decidable subset of first-order logic. There is a heateddispute between the logic of language in broad sense and the one in narrowsense on the application of the method of formalization. Using temporal logicand algebra, a formal requirement language was presented and used to describethe formal hierarchy requirements for cryptographic protocols.

在思維推理過程中,常見演繹推理(Deductive Reasoning)、歸納推理(Inductive Reasoning)和類比推理(Analogy)等。但在可計算算法設計中,常見的卻是表示“重複”含義的詞,如循環(loop)、遞歸(recursion)、周遊(traversal)、疊代(iterate)等。我們來看一下循環等形式化描述的概念及其算法實作。

1.2 遞歸和遞推概念

計算機中,凡是重複執行一段代碼,都可以稱之為循環。大部分遞歸、周遊、疊代、都是循環。遞歸就是根據一種(幾種)基本情況定義的算法,其他複雜情況都可以被逐漸還原為基本情況。在程式設計中的特征就是,在函數定義内重複調用該函數。

遞歸:從已知問題的結果出發,用疊代表達式逐漸推算出問題的開始的條件,即順推法的逆過程,稱為遞歸。

遞推:遞推算法是一種用若幹步可重複運算來描述複雜問題的方法。遞推是序列計算中的一種常用算法。通常是通過計算機前面的一些項來得出序列中的指定象的值。

周遊:按一定規則通路一個非線性的結構中的每一項,強調非線性結構(樹、圖)。

疊代:一般适用于線性結構(數組、隊列)。

1.3 遞歸的java算法設計

1.3.1算法舉例1

斐波那契數列:已知f(1) = 1 ,f(2) = 1 , 且滿足關系式f(n) = f(n-1)+ f(n-2),則f(50)等于多少?

分析:根據初始條件f(1) = 1 ,f(2) = 1 和關系式f(n) = f(n-1)+ f(n-2),可知,f(3) = f(2) +f(1) , f(3) = f(2) + f(1) …….

編寫代碼(遞歸)

publicclass

Fibonacci {

staticint

fun(

int

n){

if

(n ==

1

|| n ==

2

){

return1

;

        }

else

{

return

fun(n-

1

) + fun(n-

2

) ;

        }

    }

publicstaticvoidmain

(String[] args) {

for

(

int

i =

1

; i <=

15

; ++i)

        System.

out

.println(fun(i));

    }

}

編寫代碼(遞推)

static int fun2(int n){

    int a[] = new int[20] ;

    a[1] = 1 ;

    a[2] = 1 ;

    for(int i=3 ; i<=n ;i++){

        a[i] = a[i-1] + a[i-2] ;

    }

    return a[n] ;

}

運作結果:

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

1.3.2 算法舉例2

使用遞歸計算1+2+…+100 ;

分析:遞歸關系為f(n) = f(n-1)+ n ,遞歸出口為f(1) = 1 ;

編寫代碼(遞歸):

public class Sum {

    static int fun(int n){

        if( n == 1){

            return 1 ;

        }else{

            return fun(n-1) + n ;

        }

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        System.out.println(fun(100));

    }

}

編寫代碼(遞推)

static int fun2(int n){

    int a[] = new int [200] ;

    a[1] = 1 ;

    for(int i=2 ; i<=n ; i++){

        a[i] = a[i-1] + i ;

    }

return a[n] ;

}

運作結果:

5050

1.3.3 算法舉例3

爬樓問題:假設有n階樓梯,每次可爬1階或2階,則爬到第n層有幾種方案?

問題分析:假設一階時隻有一種方案f(1) = 1 ; 二階時有兩種方案(即一次走一階和一次走兩階)f(2) = 2 ;三階時有3種 f(3) = 3 ;四階時有五種 f(5) = 5 ;發現遞歸規律f(n) = f(n-1)+ f(n-2) ; 遞歸出口為f(1) = 1、f(2) = 2 ;

編寫代碼(遞歸):

public class Ladder {

    static int fun(int n){

        if(n == 1){

            return 1 ;

        }else if(n == 2){

            return 2 ;

        }else{

            return fun(n-1) + fun(n-2) ;

        }

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        System.out.println(fun(5));

    }

}

編寫代碼(遞推):

static int fun2(int n){

    int a[] = new int [200] ;

    a[1] = 1 ;

    a[2] = 2 ;

    for(int i=3 ; i<=n ;i++){

        a[i] = a[i-1] + a[i-2] ;

    }

    return a[n] ;

}

運作結果:

8

2. SWI-Prolog的遞歸

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

圖1:分步閱讀

Prolog是一門聲明式程式設計語言,當你處理事物集合時,如清單或樹,你會經常使用遞歸而不是疊代。遞歸是Prolog中最主要而又最難于掌握的概念之一,若要控制回溯度還與截斷有關。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

2.1 牛刀小試——尋找祖先和後代的程式

安裝好SWI-Prolog。我們先從這一個簡單的例子來了解遞歸的性質吧。

在ancestor子句中的一個子句會使用ancestor子句。在這個例子中,ancestor(Z, Y)是一個遞歸的子目标。father 是實作遞歸子目标的核心事實。規則ancestor/2有兩個子句。

如果一個規則由多個子句組成,那麼其中一個子句為真,則這個規則為真。可以把子句間的逗号看成是條件“與”的關系,把子句之間的句号看成是條件“或”的關系。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

我們可以測試一下這個規則:

我們首先詢問命題ancestor(john_boy_sr,john_boy_jr).和ancestor(zeb, john_boy_jr).是否為真,接着給出變量Who,分别尋找zeb的後代和john_boy_jr的祖先。

我們已經可以在知識庫中使用這個規則實作兩個目的:尋找祖先和後代。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

2.2 漸入佳境——利用遞歸計算階乘

一個整數的階乘定義為,該數與小于它的全部正整數的積,一個整型數的階乘用該數及後面的感歎号表示(!)。比如:5! = 5 × 4 ×3 × 2 × 1。一般形式為:

n! = n ×(n - 1) ×(n - 2) ×……× 3 × 2 × 1

然而,一個整型數的階乘還可能表示為這個整型數與公比其小1 的那個整型數的階乘的乘積,例如:5!=5×4!。這種階乘的定義方式就展現了遞歸,因為它利用階乘自定義階乘。是以,任一正整數的階乘可用下面遞歸定義給出:

n! = n ×(n-1)!

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

在數學的定義上,0的階乘等于1。是以,階乘的完整定義如下:

0! = 1(停止條件)

n! = n x(n - 1)!(遞歸定義)

轉換成Prolog程式如下圖所示:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

在詢問後,得到結果後按回車。運作結果如圖所示。值得注意的是,在知識庫中停止條件應該放在遞歸規則前面,這一點是至關重要的。因為如果不是這樣,停止條件将永遠不會滿足。假如把規則放在停止條件前面,那麼Prolog重複進入知識庫時将首先遇到它,并與其進行比對,即使是應滿足停止條件時,也絕不會與停止條件比對,進而引起無窮遞歸。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

2.3 趁熱打鐵——斐波那契數列

數學的斐波那契數列是一個正整數數列,它與黃金比例有着密切的聯系。該數列的下一個數是由其前面兩個數相加得到的,頭兩個數均為1。該數列如下:

1,1,2,3,5,8,13,21,34,55,……

通式為:

f(1) = 1(兩個停止條件)

f(2) = 1

f(n) = f(n-1) + f(n-2)(遞歸規則)

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

這裡用Num1、Num2這兩個變量分别來表示序數Num項的前面兩項;變量Term1和Term2分别表示前兩項斐波那契數的結果。來轉換成Prolog程式如下圖所示:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

運作後的結果如下圖所示。從截圖可以看出,這些遞歸的程式還存在一些問題,比如在已經得出結果後,如果按“;”鍵試圖查找另一個解時,會出現錯誤的答案,甚至開始報錯。因為如果查找另一個結果,會重新進入遞歸條件,會再次減去數字,因而會報錯。我将會在下次介紹Prolog的另一個機制——截斷。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

2.4 總結

以上幾個執行個體用于說明遞歸的Prolog程式。大多數較大的Prolog程式都可能包含遞歸,遞歸是大多數Prolog程式中的主要控制手段。

在編寫遞歸程式時,應牢記下述幾點:

❶所有遞歸規則都必須有停止條件,如果沒有停止條件,遞歸規則将無止境地遞歸下去。

❷一般情況下,停止條件應該放在知識庫中遞歸規則的上方。因為如果總找不到停止條件,也将導緻無窮遞歸。

❸通常,在編寫Prolog程式時應盡量采用遞歸,這要求自問如下問題:

➀是否可以把問題用其自身表達出來?

➁停止條件是什麼?

總的來說,遞歸規則具有下列一般形式:

遞歸規則的停止條件.

遞歸謂詞:-

 某些初始計算,

 遞歸謂詞,

 某些最終運算.

(注1:資料來自百度、CSDN等[4-6]。)

B 邏輯程式設計語言Prolog簡介(18718字)

邏輯程式設計語言Prolog簡介

文|swi-prolog.org,譯|秦隴紀,資料簡化DataSimp©20190126Sat

介紹統一化的邏輯程式設計語言SWI-Prolog的主要特性,内容翻譯自http://www.swi-prolog.org/。

1.SWI-Prolog

News: SWI-Prolog on Android TermuxSearch Documentation:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

 Robust, mature, free. Prolog for the realworld.

Home/DOWNLOAD/DOCUMENTATION/TUTORIALS/COMMUNITY/USERS/WIKI

SWI-Prolog提供全面的免費Prolog環境。自1987年成立以來,SWI-Prolog開發一直受到現實世界應用需求的驅動。SWI-Prolog廣泛用于研究和教育以及商業應用。加入已下載下傳SWI-Prolog的超過一百萬使用者。更多 ...

SWI-Prolog offers acomprehensive free Prolog environment. Since its start in 1987, SWI-Prologdevelopment has been driven by the needs of real world applications. SWI-Prologis widely used in research and education as well as commercial applications.Join over a million users who have downloaded SWI-Prolog. more ...

Download  SWI-Prolog Get Started Try SWI-Prolog online

SEARCHDOCUMENTATION:Powered by SWI-Prolog 8.1.0-47-gc355e37 

http://www.swi-prolog.org/features.html

News: SWI-Prolog Class!Search Documentation:

1.1 概述Overview

SWI-Prolog是Prolog語言的多功能實作。盡管SWI-Prolog主要在教育領域受到歡迎,但其發展主要受應用程式開發需求的驅動,通過支援許多文檔類型和(網絡)協定以及與C的全面低級接口(其為C++,Java(捆綁),C#,Python等(外部可用)的進階接口的基礎)等與其他IT元件的豐富接口促進。資料類型擴充(如dicts和strings)以及對Unicode和無界整數的完全支援簡化了與其他元件資料的平滑交換。

SWI-Prolog旨在實作可擴充性。它對多線程的強大支援有效地利用了多核硬體,并簡化了并發應用程式中的嵌入。它的即時索引(JITI)為具有數百萬個子句的謂詞提供透明和有效的支援。

SWI-Prolog統一了Prolog社群中開發的核心語言的許多擴充,例如表格、限制、全局變量、破壞性指派、分隔連續和互動者。

SWI-Prolog提供各種開發工具,其中大部分可以随意組合。本機系統提供了一個用Prolog編寫的編輯器,它是Emacs的相似克隆。它基于Prolog系統本身對代碼的實時分析提供語義突出顯示。補充工具包括圖形調試器、分析器和交叉引用器。或者,有一種GNU-Emacs模式,Eclipse插件稱為PDT和VSC插件,每種插件都可以與本機圖形工具結合使用。最後,SWISH提供了一個計算筆記本和基于Web的IDE。SWISH是一種多功能工具,可以配置和擴充以适應許多不同的場景。

SWI-Prolog提供了一個名為包的附加分發和安裝機制。包是具有最小組織約定的目錄,和描述源、版本、依賴性和自動更新支援的控制檔案。可以使用pack_install/1包從存檔,GIT倉庫或URL安裝包。包用于在社群中共享代碼。包裝系統已經發展了幾個生态系統,用于處理類型,協同處理等。

SWI-Prologis a versatile implementation of the Prolog language. Although SWI-Prologgained its popularity primarily in education, its development is mostly drivenby the needs for application development. This is facilitatedby a rich interface to other IT components by supporting many document typesand(network) protocols as well as a comprehensive low-level interface to C thatis the basis for high-level interfaces to C++, Java(bundled), C#, Python, etc(externallyavailable). Data type extensions such as dictsand stringsas well as full support for Unicode and unbounded integers simplify smoothexchange of data with other components.

SWI-Prologaims at scalability. Its robust support for multi-threadingexploits multi-core hardware efficiently and simplifies embedding in concurrentapplications. Its Just In Time Indexing(JITI) provides transparent andefficient support for predicates with millions of clauses.

SWI-Prologunifies many extensions of the core language that have beendeveloped in the Prolog community such as tabling, constraints, globalvariables, destructive assignment, delimited continations andinteractors.

SWI-Prologoffers a variety of development tools, most of which may becombined at will. The native system provides an editor written in Prolog thatis a close clone of Emacs. It provides semantic highlighting based onreal time analysis of the code by the Prolog system itself. Complementary toolsinclude a graphical debugger, profiler and cross-referencer. Alternatively,there is a mode for GNU-Emacs and, Eclipse plugin called PDTand a VSC plugin,each of which may be combined with the native graphical tools. Finally, a computationalnotebook and web based IDE is provided by SWISH. SWISH is a versatile tool thatcan be configured and extended to suit many different scenarios.

SWI-Prologprovides an add-on distribution and installation mechanism called packs.A pack is a directory with minimal organizational conventions and a controlfile that describes the origin, version, dependencies and automatic upgradesupport. Packs can be installed from an archive, GIT repository or URL using pack_install/1.Packs are used to share code in the community. The pack system has grown acouple of eco systems for dealing with types, coroutining, etc.

1.2 伺服器應用Server applications

SWI-Prolog配備了廣泛的Web伺服器(HTTP)架構,可用于提供(REST)服務和基于HTML5+CSS+JavaScript的最終使用者應用程式。Pengines(Prolog引擎)允許用戶端使用通用API對遠端伺服器上的用戶端提供的程式運作查詢。這些程式可以在沙箱中執行。

對于(Web)伺服器支援,SWI-Prolog提供可擴充多線程。我們在128核心power系統上測量了80倍加速運作。此功能使SWI-Prolog對CPU密集型伺服器任務具有吸引力,其中多個用戶端需要通路大型共享和可能的動态資料集。請注意,許多其他進階語言(如Python和Node.js)僅使用單個核心,并基于阻止I/O在任務之間切換。這種方法通常為具有大量連接配接的I/O密集型服務提供良好的資源使用,但是計算上的任務阻塞會延遲所有其他用戶端。由于SWI-Prolog的全局垃圾收集器_用于原子和移除的動态子句在專用線程中完全異步運作,是以其(軟)實時行為非常出色。

SWI-Prolog具有幾個獨特的功能,可以減少重新開機伺服器以修複錯誤或注入診斷代碼的需要。它的增量編譯與通常的本地和可回溯資料結構(撤消)相結合,允許在不重新啟動的情況下修補程式。SWI-Prolog允許安全地從另一個線程重新加載運作代碼,前提是運作謂詞的簽名不會更改。這意味着允許添加,删除和修改子句,但不允許添加,删除或重新排序參數。但是,此功能對于熱修複伺服器或将診斷代碼注入伺服器而不重新啟動非常有用。

SWI-Prologis equipped with an extensive web server(HTTP) framework thatcan be used both for providing(REST) services and end-user applications basedon HTML5+CSS+JavaScript. Pengines(Prolog engines) allow clients to run queriesagainst a client-provided program on a remote server using a generic API. Suchprograms can be executed in a sandbox.

For(web)server support SWI-Prolog provides scalable multi threading.We measured an 80 times speedup running on a 128 core power pc system. Thisfeature makes SWI-Prolog attractive for CPU intensive server tasks wheremultiple clients require access to a large shared and possibly dynamic dataset.Note that many other high-level languages such as Python and Node.js only use asingle core and switch between tasks based on blocking I/O. This approachgenerally provides good resource usage for I/O intensive services with a highnumber of connections but a task blocking on a computation delays all otherclients. As SWI-Prolog's global garbage collectors_ for atoms andremoved dynamic clauses run fully asynchronous in a dedicatedthread, its(soft) real time behaviour is excellent.

SWI-Prologhas several unique features that reduce the need to restart servers for fixingbugs or injecting diagnostic code. Its incremental compilationcombined with generally local and backtrackable data structures(undo) allowsfor patching the program without restarting. SWI-Prolog allowsfor reloading running code from another thread safely, provided the signatureof the running predicates is not changed. This implies it is allowed to add,remove and modify clauses but it is not allowed to add, remove orreorder arguments. Still, this feature is valuable for hot-fixingservers or inject diagnostic code to a server withoutrestarting.

1.3 Prolog作為統一語言Prolog as unifying language

雖然Prolog被廣泛認為是規則評估等任務的特殊用途語言,但我們認為它主要是一個适合用作各種元件間粘合的平台。其主要原因是資料是許多現代應用程式的核心,而資料的結構和存儲種類繁多。諸如SQL,SPARQL,XPATH等經典查詢語言隻能處理一種這樣的格式,而Prolog可以為這些格式提供簡潔自然的查詢語言,這些格式既可以直接執行,也可以編譯成專用的查詢語言表達式。Prolog的關系範式非常适合表格資料(RDBMS),而對遞歸代碼的優化支援非常适合樹形圖形資料(RDF)。

Prolog是域特定語言(DSL)的合适語言。SWI-Prolog通過Prolog語言的文法擴充改進了這種支援。可以明确處理的有效文法的示例是[1][2],point{x:1, y:1}和function()。此外,準引用允許與任意語言的文法進行安全和清晰的內建。例如,以下語句指定了Prolog值X的安全插值的JavaScript片段。

{|javascript(X)||var x = X;|}

AlthoughProlog is widely recognised as a special purpose language for tasks suchas rule evaluation we consider it primarily a platform that is suitable to beused as glue between various components. The main reason for this isthat data is at the core of many modern applications whilethere is a large variety in which data is structured and stored. Classicalquery languages such as SQL, SPARQL, XPATH, etc. can each deal with one suchformat only, while Prolog can provide a concise and natural query language foreach of these formats that can either be executed directly or be compiled intodedicated query language expressions. Prolog's relational paradigmfits well with tabular data(RDBMS), while optimized support forrecursive code fits well with tree and graph shaped data(RDF).

Prologis a suitable language for Domain Specific Languages(DSL). SWI-Prologhas improved this support by syntactical extensions to the Prolog language.Examples of valid syntax that can be processed unambiguously are

a[1][2]

,

point{x:1,y:1}

and

function()

. In addition, quasiquotations allow for safe and clean integration with the syntax ofarbitrary languages. For example, the following statement specifies a fragmentof JavaScript with a safe interpolation of the Prolog valueX.

{|javascript(X)||var x = X;|}

1.4 功能清單Feature list

以下列出了我們認為SWI-Prolog的主要功能以及相關文檔的連結。

Belowis a list of what we consider key features of SWI-Prolog with links to therelevant documentation.

1.4.1 引擎Engine

•快速編譯。例如,在14秒内從Prolog源加載WordNet 3.0或從快速加載檔案格式加載0.4秒(參見qcompile/1)。WordNet源計數為821,515行。系統:Intel i7-3770上的Ubuntu 16.04,32Gb記憶體。

•強大且無記憶體洩漏。用于多個24x7運作的伺服器(包括此Web服務)。

•小。完整的開發環境,包括圖形,庫和許多接口包,需要大約100MB的硬碟。核心大約是1.4MB(Ubuntu 16.04 .so檔案)

•适用于大型應用程式。程式大小,原子長度,術語arity或整數值沒有限制。具有許多(索引)事實的謂詞沒有性能下降。

•對任何參數的靜态和動态代碼進行即時索引,大大簡化了處理多模式關系的條款。從7.5版開始,支援多參數JITI。如果沒有選擇性單參數索引,這将為兩個參數的組合值建立索引。從版本7.7開始,我們還支援對複合術語的參數進行索引。此功能顯着提高了文法規則(DCG)中處理終端的性能。

•基于GMP庫的無界整數和有理數運算。

•好東西:子產品(向上相容Quintus和SICStus),垃圾收集(對C/C ++透明 - 代碼,包括原子和子句垃圾收集),最後調用優化,運作時堆棧的動态擴充,異常處理(包括用于捕獲和抛出異常的C/C ++接口)。

•歸因變量,coroutining(當機/2,當/2,dif/2),全局變量,循環項。

•标志控制的發生檢查處理(假/真/錯誤)請參見current_prolog_flag/2。發生檢查的有效實作僅檢驗新綁定不引入循環。

•内部UNICODE字元集處理。适用于網絡和國際應用。

•多線程支援:在同一資料庫上運作多個預先安排好的prolog引擎。

•引擎,也稱為互動器,提供協同程式,可用于狀态累積和大規模并發,例如群體智能和模拟。

•定界延續是新控制結構和實作方面程式設計的強大建構塊。

•Tabling(SLG分辨率)提供了更強大的解析技術,用于解決複雜相關規則上的查詢并保證終止。

·      fast compilation. E.g., loads WordNet 3.0in 14 seconds from the Prolog source or 0.4 seconds from quick load fileformat(see qcompile/1).The WordNet source counts 821,515 lines. System: Ubuntu 16.04 on Intel i7-3770,32Gb memory.

·      Robust and free of memory leaks. In use for severalservers that run 24x7(including this web service).

·      Small. The full development environment, includinggraphics, libraries and many interface packages, requires approximately 100MBhard disk. The kernel is about 1.4MB(Ubuntu 16.04 .so file)

·      Scales well for large applications. No limits onprogram size, atom length, term arity or integer values. No performancedegradation on predicates with many(indexed) facts.

·      Just-In-Time indexing of both static and dynamic code on anyargument greatly simplifies handling multi-moded relations with many clauses.As of version 7.5, multi-argument JITI is supported. Thiscreates an index for the combined value of two arguments if there is noselective single-argument index. As of version 7.7 we also support indexing onthe arguments of compound terms. This feature notably improves the performancefor handling terminals in grammar rules(DCGs).

·      Unboundedinteger and rationalnumber arithmetic based on GMP library.

·      Thegoodies: modules(upward compatible to Quintus and SICStus), garbage-collection(transparentto C/C++-code, including atom and clause garbage collection), last-calloptimisation, dynamic expansion of the runtime stacks, exception-handling(includingC/C++ interface for both catching and throwing exceptions).

·      attributedvariables, coroutining(freeze/2,when/2,dif/2), global variables,cyclic terms.

·      Flag-controlledhandling of occurs-check(false/true/error) see current_prolog_flag/2. Efficient implementation of occurs checking thatonly verifies that new bindings do not introduce cycles.

·      UNICODE character set handling internal. Ideal for web andinternational applications.

·      Multi-threading support: run multiple pre-emptively scheduled prologengines on the same database.

·      Engines,also known as interactors provide coroutines that can be used forstate accumulation and massive concurrency for e.g., swarm intelligenceand simulations.

·      Delimited continuations is a powerful building block for new controlstructures and realise aspect programming.

·      Tabling(SLG resolution) provides a more robust resolution technique forsolving queries over complex interrelated rules with guaranteed termination.

1.4.2 限制處理Constraint handling

·      •CHR(限制處理規則),clp(FD),clp(R,Q)和其他各種庫。

·      Librariesfor CHR(ConstraintHandling Rules),

clp(FD)

,

clp(R,Q)

and various others.

1.4.3 連通性Connectivity

•SWI-Prolog為HTTP提供廣泛的用戶端和伺服器庫。HTTP伺服器架構處理生成HTML,交換JSON或XML,身份驗證,會話等等。用戶端和伺服器都支援HTTPS。

•靈活快速的C語言和C ++語言接口。該接口允許雙向調用,雙向處理非确定性以及在C/C ++項目中嵌入SWI-Prolog核心。

•可以使用JPL,Python和C#等進階語言(如Java)的接口。

•ODBC接口提供資料庫連接配接。

•低級網絡支援包括套接字(TCP和UDP),SSL和TIPC。

•用于解析和生成SGML/XML/HTML,JSON和YAML的庫

•關聯資料(RDF)支援包括讀寫許多RDF格式(RDF/XML,Turtle,Ntriples,NQuads)和高效的三重存儲。請參閱semweb包。

·      SWI-Prologprovides extensive client and server libraries for HTTP. The HTTPserver framework deals with generating HTML, exchange of JSON or XML,authentication, sessions, and much more. Both client and server supports HTTPS.

·      Flexibleand fast interface to the C- and C++-language. The interfaceallows for calling both ways, handling of non-determinism both ways and embeddingof the SWI-Prolog kernel in C/C++ projects.

·      Interfacesto high level languages such as Java using JPL, Python and C# are available.

·      Databaseconnectivity is provided by the ODBCinterface.

·      Lowlevel network support includes sockets(both TCP and UDP), SSL and TIPC.

·      Librariesfor parsing and generating SGML/XML/HTML, JSONand YAML

·      LinkedData(RDF) support includes reading and writing many RDF formats(RDF/XML,Turtle, Ntriples, NQuads) and an efficient triple store. See the semwebpackage.

1.4.4 開發工具Development tools

•通過XPCE(Windows,Unix/Linux,MacOSX)支援圖形的所有平台上的源級調試器。

•所有主要平台(Windows,Linux,MacOSX)的執行分析器(時間和呼叫統計)。

•交叉參考。gxref/0為可擴充的Prolog交叉引用器(外部參照)提供了圖形前端。

•通過PlDoc識别程式設計支援。提供手冊和應用程式文檔的內建視圖,并為您的應用程式生成LaTeX文檔。

•通過PlUnit進行單元測試支援。

•SWISH提供了一個基于Web的平台,用于在協作環境中開發和運作Prolog代碼。

·      Source-level debugger on all platforms that supports graphics through XPCE(Windows,Unix/Linux, MacOSX).

·      Executionprofiler(timeand call statistics) for all major platforms(Windows, Linux, MacOSX).

·      Cross-Referencer. gxref/0provides a graphical front-end for the extensible Prolog cross-referencer(xref).

·      Literateprogramming support through PlDoc.Provides integrated view on manual and application documentation and producingLaTeX documentation for your application.

·      Unittesting support through PlUnit.

·      SWISHprovides a web-based platform for developing and running Prolog code in acollaborative environment.

1.4.5 相容性Compatibility

•全面的内置謂詞集,涵蓋ISO标準的第1部分,事實上的愛丁堡Prolog标準以及Quintus和SICStus Prolog的重要部分。與Ciao,YAP和GNU-Prolog的公平相容性。雖然目标是盡可能保持相容性,但SWI-Prolog故意偏離ISO标準以适應其他功能并與現代語言同步。閱讀更多擴充和方向

·      Comprehensiveset of built-in predicates, covering Part 1 of the ISO standard, thede-facto Edinburgh Prolog standard and important parts of Quintus andSICStus Prolog. Fair compatibility to Ciao, YAP and GNU-Prolog. Although theaim is to maintain compatibility wherever possible, SWI-Prolog deliberatelydeviates from the ISO standard to accommodate additional functionality andsynchronise with modern languages. Read more in Extensionsand Directions

1.4.6 便攜性Portability

•适用于許多平台,包括幾乎所有Unix/Linux平台,Windows,MacOS X(使用Xquartz forgraphics)WebAssembly(WASM),Android Termux等等。支援32位和64位硬體。SWI-Prolog已在許多CPU上進行編譯和測試,例如x86,x64,SPARC,PowerPC,許多ARM型号。源是普通的C99,使用CMake自動配置(自版本7.7.20起)。對交叉編譯的支援正在穩步提高。

•與機器無關的儲存狀态(儲存在一個平台上,使用另一個平台的虛拟機運作)。

•Windows(32/64位)和MacOS X(64位)的正常二進制分發版和Ubuntu的PPA(穩定和開發)

•定期分發完整的源包。這些來源也可通過GIT擷取。

·      Portable to many platforms, including almost all Unix/Linuxplatforms, Windows, MacOS X(using Xquartz for graphics) WebAssembly(WASM),Android Termux and many more. Both 32-bit and64-bit hardware is supported. SWI-Prolog has been compiled andtested on many CPUs, e.g., x86, x64, SPARC, PowerPC, many ARM models. Sourcesare plain C99, configured automatically using CMake(as of version 7.7.20).Support for cross-compilation is steadily improving.

·      Machine-independentsaved-states(save on one platform, run using the virtual machine ofanother platform).

·      Regularbinary distributions for Windows(32/64 bits) and MacOS X(64 bits)) andPPAs for Ubuntu(stableand development)

·      Regulardistribution of the full source packages. The sources are alsoaccessible through GIT.

1.4.7 法律Legal

•SWI-Prolog以簡化BSD許可證(也稱為BSD-2許可證)分發。一些使用過的庫和擴充包具有不同的許可條件。可以通過運作license/0來檢查适用于正在運作的配置的許可證。請參閱許可證了解詳情

使用doc-needs-help标記混淆頁面|如果您已登入,則标記與您的個人資料相關聯

标簽:登入以添加新的注釋文章。登入由SWI-Prolog 8.1.0-47-gc355e37提供支援

·      SWI-Prologis distributed under the Simplified BSD license, also known as the BSD-2license. Some of the used libraries and extension packages have differentlicense conditions. The licenses applicable to a running configuration can beexamined by running license/0.See licensefor details.

Tag confusing pages withdoc-needs-help|Tags are associated to yourprofile if you are logged in

Tags: loginto add a new annotation post. loginPowered by SWI-Prolog 8.1.0-47-gc355e37

2. Prolog

Prolog

文|百度百科,資料簡化DataSimp©20190126Sat

Prolog(Programming in Logic的縮寫)是一種邏輯程式設計語言。它建立在邏輯學的理論基礎之上,最初被運用于自然語言等研究領域。現已廣泛的應用在人工智能的研究中,可以用來建造專家系統、自然語言了解、智能知識庫等。同時對一些通常的應用程式的編寫也很有幫助,能夠比其他的語言更快速地開發程式,因為它的程式設計方法更像是使用邏輯的語言來描述程式。

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

Prolog圖冊

中文名:邏輯程式設計語言,外文名:Prolog,全稱:Programming in Logic,分類:邏輯程式設計語言、理論基礎、邏輯學、運用、自然語言等。

2.1 簡介

Prolog(Programming in Logic的縮寫)是一種邏輯程式設計語言。它建立在邏輯學的理論基礎之上,最初被運用于自然語言等研究領域。現已廣泛的應用在人工智能的研究中,可以用來建造專家系統、自然語言了解、智能知識庫等。同時對一些通常的應用程式的編寫也很有幫助,能夠比其他的語言更快速地開發程式,因為它的程式設計方法更象是使用邏輯的語言來描述程式。

2.2 曆史

Prolog語言最早由Aix-Marseille大學的AlainColmerauer與PhillipeRoussel等人于60年代末研究開發。1972年被公認為是Prolog語言正式誕生的年份,自1972年以後,分支出多種Prolog的方言。最主要的兩種方言為Edinburgh和Aix-Marseille。最早的Prolog解釋器由Roussel建造,而第一個Prolog編譯器則是 DavidWarren編寫的。

Prolog一直在北美和歐洲被廣泛使用。日本政府曾經為了建造智能計算機而用Prolog來開發ICOT第五代計算機系統。在早期的機器智能研究領域,Prolog曾經是主要的開發工具。

80年代Borland開發的Turbo Prolog,進一步普及了Prolog的使用。1995年确定了ISOProlog标準。

受Prolog影響的程式語言有很多,較為人所知的有:Mercury、Oz、Erlang、Strand。

目前比較流行的實作工具包括 SWI-Prolog, Yap 等。

2.3 特點

1. prolog程式沒有特定的運作順序,其運作順序是由電腦決定的,而不是程式設計式的人。

從這個意義上來說,prolog程式不是真正意義上的程式。所謂程式就是按照一定的步驟運作的計算機指令,而prolog程式的運作步驟不由人來決定。它更像一種描述型的語言,用特定的方法描述一個問題,然後由電腦自動找到這個問題的答案。舉個極端的例子,你隻需要把某個數學題目告訴它,它就會自動的找到答案,而不像使用其他的語言一樣,必須人工的編制出某種算法。

2. prolog程式中沒有if、when、case、for這樣的控制流程語句

前面已經說了,程式的運作方式有電腦自己決定,當然就用不到這些控制流程的語句了。通常情況下,程式員不需要了解程式的運作過程,隻需要注重程式的描述是否全面,不過prolog也提供了一些控制流程的方法,這些方法和其他語言中的方法有很大的差別,希望你在以後的學習當中能夠融會貫通。

3. prolog程式和資料高度統一

在prolog程式中,是很難厘清楚哪些是程式,哪些是資料的。事實上,prolog中的所有東西都有相同的形式,也就是說資料就是程式,程式就是資料。舉一個其他語言的例子:如果想用c語言編寫一個計算某個數學表達式的程式很簡單(比如:a=2+5*4),因為這是一段程式。但是如果想編寫一個計算使用者輸入的表達式的值的程式就很困難了。因為使用者輸入的是一段資料(字元串),如果想讓c語言處理這個字元串,就需要很多方面的技術。則正是因為在c語言中,程式和資料是分開的。而在prolog就不存在這個問題,你甚至可以很輕松的編寫處理其它prolog程式的程式。

4. prolog程式實際上是一個智能資料庫

prolog的原理就是關系資料庫,它是建立在關系資料庫的基礎上的。在以後的學習中你會發現它和SQL資料庫查詢語言有很多相似之處。使用prolog可以很友善的處理資料。

5. 強大的遞歸功能

在其它的語言中,你也許已經接觸過遞歸程式了。遞歸是一種非常簡潔的方式,它能夠有效的解決許多難題。而在prolog中,遞歸的功能得到了充分的展現,你甚至都會感到驚奇,遞歸居然有如此巨大的能力。

2.4 文法示例

表示事實:

human(kate).

human(bill).

likes(kate,bill).

——表示kate和bill是人(human),kate喜歡bill;

表示規則:

friend(X,Y):-likes(X,Y),likes(Y,X).

——表示對于兩個對象XY,如果X喜歡Y,且Y喜歡X,那麼他們是朋友。

2.5 範例

Quicksort

q:-L=[33,18,2,77,66,18,9,25], last(P,_),(quicksort(L,P,_),write(P),nl).

partition([],_,[],[]).

partition([X|Xs],Pivot, Smalls, Bigs):-

(X @< Pivot ->

Smalls=[X|Rest],

partition(Xs,Pivot, Rest, Bigs)

;Bigs =[X|Rest],

partition(Xs,Pivot, Smalls, Rest)

).

quicksort([])-->[].

quicksort([X|Xs])-->

{partition(Xs, X, Smaller, Bigger)},

quicksort(Smaller),[X],quicksort(Bigger).

:-initialization(q).

Sort

q:-L=[33,18,2,77,18,66,9,25],(sortcsj(L,P),write(P),nl).

sortcsj(L,S):-permutation(L,S), ordered(S).

ordered([]).

ordered([_|[]]).

ordered([A|[B|T]]):-A =< B, ordered([B|T]).

:-initialization(q).

Russell'sparadox

q:-px(_).

px(1):-\+px(1).

:-initialization(q).

如何使用Prolog

一般而言,prolog作為資料或者邏輯處理程式而運作,配合其它程式如VC++、JAVA等的界面,由此實作帶UI互動的“智能”軟體,當然你所編輯出來的“智能”是軟體,而不能說是真正意義的人工智能。上文說Prolog就是一個智能資料庫,其實不然,Prolog主要是對資料進行一種關系描述,比如張三和李四是A關系,李四和王二是B關系,A關系==B關系,那麼Prolog則擅長處理這種邏輯上的資料關系,不能和SQL混為一談,是以說,Prolog的用途是來處理資料之間關系的,而不是存儲資料本質的存在。

(注2:資料來自swi-prolog.org[7-8]和百度百科等[9]。詞條标簽:科技術語,科學。詞條統計:浏覽163103次,編輯21次曆史版本,最近更新2018-10-07:monarch巨蟹。[9])

免責說明:資料來自SWI-prolog/baidubaike/csdn。文章隻為學術新聞資訊傳播,注明出處文字參考文獻可溯源。本公衆号不持有任何傾向性,亦不表示認可其觀點或其所述。

轉載本公号文章請注明出處、作者、時間等資訊,如“此文轉自©公号:資料簡化DataSimp,作者:秦隴紀,時間:2016.3.15Tue”字樣,詳情郵件咨詢[email protected],轉載請保留本資訊。本公号保留相應版權,如有引文/譯注/出處不明或遺漏/版權問題等,請給公号發留言或郵件到[email protected]。歡迎資料科學和人工智能學界、産業界同仁賜稿,投稿郵箱[email protected],範圍:AI/語言處理/資料/智能等科學技術論文。

資料DataSimp社群分享:資訊與資料處理分析、資料科學研究前沿、資料資源現狀和資料簡化基礎的科學知識、技術應用、産業活動、人物機構等資訊。歡迎大家參與投稿,為資料科學技術做貢獻,使國人盡快提高資料能力,提高社會資訊流通效率。做事要平台,思路要跟進;止步吃住行,無力推文明。要推進人類文明,不可止步于敲門呐喊;設計空想太多,無法實作就虛度一生;工程能力至關重要,秦隴紀與君共勉之。

—END—

參考文獻(1227字)

1. 推理,《現代漢語詞典第6版》第1323頁.

2. [德] 黑格爾,譯者:梁志學.《邏輯學》.北京:人民出版社,2002:10-41.

3. 劉穎,蘇巧玲.《醫學心理學》.北京:中國華僑出版社,1997:27-28.

4. 葉清逸. 遞推與遞歸.[EB/OL]; 網易智能, https://blog.csdn.net/u013634252/article/details/80551060, 2018-06-02, visitingdata:2019-01-26.

5. 小小小青菜. 循環 & 遞歸 & 遞推 之間的聯系和差別.[EB/OL]; https://blog.csdn.net/weixin_35909255/article/details/70738323, 2017-04-25, visitingdata:2019-01-26.

6. Never-say-Never. 程式設計中,循環、疊代、周遊和遞歸之間的差別.[EB/OL]; CSDN, https://blog.csdn.net/mad1989/article/details/8933078,2013-05-16, visiting data:2019-01-26.

7. baidujingyan. SWI-Prolog的遞歸.[EB/OL]; baidujingyan, https://jingyan.baidu.com/article/4f7d5712099ec41a201927ed.html,2018-08-15, visiting data:2019-01-26.

8. SWI-Prolog. Robust, mature, free. Prolog for the real world. --SWI-Prolog.[EB/OL]; SWI-Prolog, http://www.swi-prolog.org/, visitingdata:2019-01-26.

9. SWI-Prolog. SWI-Prolog's features.[EB/OL]; SWI-Prolog,http://www.swi-prolog.org/features.html, visiting data:2019-01-26.

10. 最近更新:monarch巨蟹(2018-10-07). Prolog.[EB/OL]; baidubaike,https://baike.baidu.com/item/Prolog/, 2018-10-07, visiting data:2019-01-26.

x.秦隴紀.資料簡化社群Python官網Web架構概述;資料簡化社群2018年全球資料庫總結及18種主流資料庫介紹;資料科學與大資料技術專業概論;人工智能研究現狀及教育應用;資訊社會的資料資源概論;純文字資料溯源與簡化之神經網絡訓練;大資料簡化之技術體系.[EB/OL];資料簡化DataSimp(微信公衆号),http://www.datasimp.org,2017-06-06.

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(24555字)

(附PDF發“遞歸prolog簡介”下載下傳)

秦隴紀©2010-2019資料簡化DataSimp

簡介:知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介。作者:秦隴紀。來源:SWI-prolog/baidubaike/csdn/資料簡化社群/秦隴紀微信群聊公衆号,參考文獻附引文出處。公号輸入欄發送關鍵字“遞歸prolog簡介”或文末連結“閱讀原文”可下載下傳本文27k字12圖16頁PDF資料;點連結“資料簡化DataSimp”關注後,菜單項有文章分類頁。版權聲明:科普文章僅供學習研究,公開資料©版權歸原作者,請勿用于商業非法目的。秦隴紀2010資料簡化DataSimp綜合彙譯編,投稿合作、轉載授權/侵權、原文引文錯誤等請聯系[email protected]溝通。主編譯者:秦隴紀,資料簡化DataSimp/科學Sciences/知識簡化新媒體創立者,資料簡化社群創始人,資料簡化/知識簡化概念和理論提出者,資料簡化OS設計師/架構師,ASM/Cs/Java/Python/Prolog程式員,前英語/設計/IT教師。每天大量中英文閱讀/設計開發調試/文章彙譯編簡化,時間精力人力有限,歡迎支援加入社群。社群媒體:“資料簡化DataSimp、科學Sciences、知識簡化”新媒體聚集專業領域一線研究員;研究技術時也傳播知識、專業視角解釋和普及科學現象和原理,展現自然社會生活之科學面。PhDS01秦隴紀發起,期待您參與各領域;歡迎分享、贊賞、支援科普~~

Appx(1236字).資料簡化DataSimp社群簡介

資訊社會之資料、資訊、知識、理論持續累積,遠超個人認知學習的時間、精力和能力。必須行動起來,解決這個問題。應對大資料時代的資料爆炸、資訊爆炸、知識爆炸,解決之道重在資料簡化(Data Simplification):簡化減少知識、媒體、社交資料,使資訊、資料、知識越來越簡單,符合人與裝置的負荷。(秦隴紀,2010)

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

資料簡化DataSimp年度會議(DS2010-2019),聚焦資料簡化技術(Data Simplification Techniques):對各類資料從采集、處理、存儲、閱讀、分析、邏輯、形式等方面做簡化,應用于資訊及資料系統、知識工程、各類資料庫、實體空間表征、生物醫學資料,數學統計、自然語言處理、機器學習技術、人工智能等領域。歡迎資料科學技術、簡化執行個體相關論文投稿加入資料簡化社群,參加會議出版專著。請投會員郵箱[email protected],詳情通路社群網站www.datasimp.org。填寫申請表加入資料簡化DataSimp社群成員,應至少有一篇資料智能、程式設計開發IT文章:①原創資料智能科技論文;②資料智能工程技術開源程式代碼;③翻譯美歐資料智能科技論文;④社群網站發帖人管理者版主志願者義工;⑤完善黑白靜态和三彩色動态社群S圈型LOGO圖示。DataSimplification/Sciences/Knowledge Simplification Public Accounts——[email protected], 2018.12.12Wed,Xi'an, Shaanxi, China.

LIFE

Life begins at the end of your comfortzone.——Neale Donald Walsch

THE DAY

The strength of purpose and the clarity ofyour vision,alongwith the tenacity to pursue it,is your underlying driver ofsuccess.——Ragy Tomas

投稿QQ群223518938資料簡化DataSimp社群;技術公衆号“資料簡化DataSimp”留言,或(備注:姓名/機關-職務/學校-專業/手機号)加微信賬号QinlongGEcai,進“資料簡化DataSimp社群”投稿群或“科學Sciences學術文獻”讀者群等群聊。關注如下三個公衆号(搜名稱也行),關注後底部菜單有文章分類頁連結。

資料技術公衆号“資料簡化DataSimp”:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

科普公衆号“科學Sciences”:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

社會教育知識公衆号“知識簡化”:

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

(轉載請寫出處:©資料簡化DataSimp2010-2018彙譯編,歡迎技術、傳媒夥伴投稿、加入資料簡化社群!“資料簡化DataSimp、科學Sciences、知識簡化”投稿回報郵箱[email protected]。)

普及科學知識,分享到朋友圈

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

轉發/留言/打賞後“閱讀原文”下載下傳PDF

閱讀原文

知識庫遞歸程式設計java和prolog代碼;邏輯語言Prolog簡介(附24555字PDF發“遞歸prolog簡介”下載下傳)

微信掃一掃

關注該公衆号