2015-11-30 89 views
3

我只是想知道正則表達式是否適合邏輯編程的定義。這是一組規則,根據詢問的方式,給定一組事實產生結果。對我來說,這聽起來應該屬於邏輯編程,但我不確定。正則表達式是邏輯編程的一個例子嗎?

謝謝!

+2

絕對:不! – CapelliC

+0

爲什麼'prolog'標籤? – nouney

+1

誰需要正則表達式?我們有[tag:dcg] -formalism,它涵蓋了上下文無關的語言和超越! – false

回答

4

有限狀態機是命令式編程的一個例子嗎?

正則表達式和邏輯程序肯定有一個共同點:它們都有一個自然的聲明閱讀,你可以很容易地提出和回答:

被描述什麼

使用充分表達的邏輯編程語言(和Prolog肯定屬於該類別),很容易描述給定正則表達式的含義。

但是,您將需要以獲得圖靈完備的編程語言,甚至一些超越只是普通的語言一些嚴重的擴展正則表達式。

+2

謝謝!這非常有幫助。 – user10628

2

正則表達式是一種特定於域的語言。它不指定匹配的是如何發生的,只是會發生,因此它是在這個意義上聲明 - 有兩個相互競爭來實現正則表達式引擎,NFA和DFA的方式。事實上,其中之一就是「非確定性有限自動機」,這是聲明式編程的一個方面,特別是Prolog。在這兩種情況下,它確實只與回溯有關,但正則表達式的領域非常有限,幾乎沒有任何有意義的對應關係。

雖然你可以進入有關有限自動機語義,最終沒人用正則表達式來表達對狀態一般的計算,他們只嚴格把它們作爲其他語言中的字符串匹配一個DSL。所以它是「這是一個通用查詢」的意義上的聲明,大多數系統會做一些明智的事情。

序言顯然是一個很多比正則表達式更強大,但我可以看到你的思路,我認爲這是一個比喻還有,即使是不完美的。