正则表达式是逻辑编程的一个例子吗?
Are regular expressions an example of logic programming?
我只是想知道正则表达式是否符合逻辑编程的定义。它是一组规则,给定一组事实会根据查询的方式产生结果。对我来说,这听起来应该属于逻辑编程,但我不确定。
谢谢!
有限状态机是命令式编程的一个例子吗?
正则表达式和逻辑程序肯定有一个共同点:两者都有自然的声明式阅读,你可以很容易地提问和回答:
What is being described?
使用具有足够表现力的逻辑编程语言(Prolog 绝对属于该类别),很容易描述给定正则表达式的含义。
但是,您需要对正则表达式进行一些重要的扩展,以获得图灵完备的编程语言,甚至超越常规语言的东西。
正则表达式是一种特定领域的语言。它没有指定 如何 匹配发生,只是 它会发生,所以在这个意义上它是声明性的——并且有实现正则表达式引擎的两种竞争方式,NFA 和 DFA。实际上,其中之一是 "non-deterministic finite automata,",这是声明式编程的一个方面,尤其是 Prolog。在这两种情况下,它实际上只与回溯有关,但正则表达式的范围非常有限,几乎没有有意义的对应关系。
虽然您可以了解有关有限自动机的语义,但最终没有人使用正则表达式来表达带有状态的一般计算,他们仅将它们严格用作其他语言中字符串匹配的 DSL。所以它在 "here is a generic query" 的意义上是声明性的,大多数系统都会用它做一些明智的事情。
Prolog 显然比正则表达式强大很多,但我可以看到你的思路,我认为那里有一个类比,即使它并不完美。
我只是想知道正则表达式是否符合逻辑编程的定义。它是一组规则,给定一组事实会根据查询的方式产生结果。对我来说,这听起来应该属于逻辑编程,但我不确定。
谢谢!
有限状态机是命令式编程的一个例子吗?
正则表达式和逻辑程序肯定有一个共同点:两者都有自然的声明式阅读,你可以很容易地提问和回答:
What is being described?
使用具有足够表现力的逻辑编程语言(Prolog 绝对属于该类别),很容易描述给定正则表达式的含义。
但是,您需要对正则表达式进行一些重要的扩展,以获得图灵完备的编程语言,甚至超越常规语言的东西。
正则表达式是一种特定领域的语言。它没有指定 如何 匹配发生,只是 它会发生,所以在这个意义上它是声明性的——并且有实现正则表达式引擎的两种竞争方式,NFA 和 DFA。实际上,其中之一是 "non-deterministic finite automata,",这是声明式编程的一个方面,尤其是 Prolog。在这两种情况下,它实际上只与回溯有关,但正则表达式的范围非常有限,几乎没有有意义的对应关系。
虽然您可以了解有关有限自动机的语义,但最终没有人使用正则表达式来表达带有状态的一般计算,他们仅将它们严格用作其他语言中字符串匹配的 DSL。所以它在 "here is a generic query" 的意义上是声明性的,大多数系统都会用它做一些明智的事情。
Prolog 显然比正则表达式强大很多,但我可以看到你的思路,我认为那里有一个类比,即使它并不完美。