正则表达式是逻辑编程的一个例子吗?

时间:2015-11-30 15:21:49

标签: regex prolog logic-programming

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

谢谢!

2 个答案:

答案 0 :(得分:4)

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

正则表达式和逻辑程序肯定有一个共同点:两者都具有自然的声明性读数,您可以随时提问和回答:

  

正在描述什么

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

但是,您需要对正则表达式进行一些严格的扩展才能获得图灵完整的编程语言,甚至不仅仅是常规语言。

答案 1 :(得分:2)

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

虽然你可以进入有限自动机的语义,但最终没有人使用正则表达式来表达状态的一般计算,他们只将它们严格地用作DSL以便在其他语言中进行字符串匹配。因此它在“这是一个通用查询”的意义上是声明性的,并且大多数系统都会用它来做一些合理的事情。

Prolog显然比正则表达更强大,但我可以看到你的思路,我认为那里有一个类比,即使它不完美。