2015-11-30 51 views
3

我只是想知道正则表达式是否适合逻辑编程的定义。这是一组规则,根据询问的方式,给定一组事实产生结果。对我来说,这听起来应该属于逻辑编程,但我不确定。正则表达式是逻辑编程的一个例子吗?

谢谢!

+2

绝对:不! – CapelliC

+0

为什么'prolog'标签? – nouney

+1

谁需要正则表达式?我们有[tag:dcg] -formalism,它涵盖了上下文无关的语言和超越! – false

回答

4

有限状态机是命令式编程的一个例子吗?

正则表达式和逻辑程序肯定有一个共同点:它们都有一个自然的声明阅读,你可以很容易地提出和回答:

被描述什么

使用充分表达的逻辑编程语言(和Prolog肯定属于该类别),很容易描述给定正则表达式的含义。

但是,您将需要以获得图灵完备的编程语言,甚至一些超越只是普通的语言一些严重的扩展正则表达式。

+2

谢谢!这非常有帮助。 – user10628

2

正则表达式是一种特定于域的语言。它不指定匹配的是如何发生的,只是会发生,因此它是在这个意义上声明 - 有两个相互竞争来实现正则表达式引擎,NFA和DFA的方式。事实上,其中之一就是“非确定性有限自动机”,这是声明式编程的一个方面,特别是Prolog。在这两种情况下,它确实只与回溯有关,但正则表达式的领域非常有限,几乎没有任何有意义的对应关系。

虽然你可以进入有关有限自动机语义,最终没人用正则表达式来表达对状态一般的计算,他们只严格把它们作为其他语言中的字符串匹配一个DSL。所以它是“这是一个通用查询”的意义上的声明,大多数系统会做一些明智的事情。

序言显然是一个很多比正则表达式更强大,但我可以看到你的思路,我认为这是一个比喻还有,即使是不完美的。