【问题标题】:Are regular expressions an example of logic programming?正则表达式是逻辑编程的一个例子吗?
【发布时间】:2015-12-01 00:44:19
【问题描述】:
我只是想知道正则表达式是否符合逻辑编程的定义。它是一组规则,给定一组事实,根据询问的方式产生结果。对我来说,这听起来应该属于逻辑编程,但我不确定。
谢谢!
【问题讨论】:
-
-
谁需要正则表达式?我们有dcg-formalism,它涵盖上下文无关语言及其他!
标签:
regex
prolog
logic-programming
【解决方案1】:
有限状态机是命令式编程的一个例子吗?
正则表达式和逻辑程序肯定有一个共同点:两者都有一种自然的声明式阅读,你可以很容易地提问和回答:
描述了什么?
使用具有足够表达能力的逻辑编程语言(Prolog 肯定属于这一类),很容易描述给定正则表达式的含义。
但是,您需要对正则表达式进行一些重要的扩展,才能获得图灵完备的编程语言,甚至超越常规语言。
【解决方案2】:
正则表达式是一种特定领域的语言。它没有指定如何匹配发生,只是那个它将发生,所以在这个意义上它是声明性的——并且有两种相互竞争的方式来实现正则表达式引擎、NFA 和 DFA。事实上,其中之一是“非确定性有限自动机”,这是声明式编程的一个方面,尤其是 Prolog。在这两种情况下,它实际上只与回溯有关,但正则表达式的范围非常有限,几乎没有有意义的对应关系。
虽然您可以了解有关有限自动机的语义,但最终没有人使用正则表达式来表达具有状态的一般计算,他们仅将它们严格用作其他语言中字符串匹配的 DSL。所以它在“这是一个通用查询”的意义上是声明性的,大多数系统都会用它做一些明智的事情。
Prolog 显然比正则表达式强大得多,但我可以看到你的思路,我认为那里有一个类比,即使它并不完美。