【问题标题】:Are regular expressions an example of logic programming?正则表达式是逻辑编程的一个例子吗?
【发布时间】:2015-12-01 00:44:19
【问题描述】:

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

谢谢!

【问题讨论】:

  • 为什么是prolog 标签?
  • 谁需要正则表达式?我们有dcg-formalism,它涵盖上下文无关语言及其他!

标签: regex prolog logic-programming


【解决方案1】:

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

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

描述了什么

使用具有足够表达能力的逻辑编程语言(Prolog 肯定属于这一类),很容易描述给定正则表达式的含义。

但是,您需要对正则表达式进行一些重要的扩展,才能获得图灵完备的编程语言,甚至超越常规语言。

【讨论】:

  • 谢谢!这很有帮助。
【解决方案2】:

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

虽然您可以了解有关有限自动机的语义,但最终没有人使用正则表达式来表达具有状态的一般计算,他们仅将它们严格用作其他语言中字符串匹配的 DSL。所以它在“这是一个通用查询”的意义上是声明性的,大多数系统都会用它做一些明智的事情。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多