是否存在纯声明式的通用编程语言?

7

我一直在研究声明语言,似乎声明式只是逻辑和函数式语言的统称。或者我错了吗?是否存在通用的声明式编程语言,不能归类为函数式或逻辑性编程,而只是“声明式”呢?


1
规则引擎,不需要存储过程的SQL。 - duffymo
1个回答

3
一种声明式语言要求你编写代码以描述想要发生的事情,而不是像命令式语言那样编写计算应该如何进行的代码。通常这意味着声明式语言不允许副作用,而命令式语言几乎需要使用副作用进行编码。 为了使通用语言真正通用,它们需要能够编写副作用。这使得它们很难成为声明式语言。像 F# 这样的语言在函数式编程方面有很强的基础,但具有允许面向对象编程和副作用的结构。这使得 F# 成为一种通用语言,但通过允许将命令式风格编码与声明式编码混合来实现。虽然不完全不可能存在“纯声明式”的通用编程语言,但这只是根据定义而言。

1
你是否不了解强制纯洁性的函数式编程语言(与允许任意未跟踪副作用的F#相反),例如Haskell?或者你认为它们不能算是纯声明式,因为它们能够执行IO操作? - Ben
1
我认为你有点误解了问题的重点。问题是是否存在声明性语言而不是函数式或逻辑语言。 - sepp2k
1
但是有一些语言提供了纯声明性的抽象,用于描述IO的执行方式,例如Haskell和Mercury。如果有任何(对实际编程有用的)语言可以被称为声明性的话,那么这些语言可以被称为声明性的。然而你提到了F#。F#甚至根本不是真正的声明性语言(未跟踪副作用的存在意味着您需要一个操作视图来理解F#程序)。 - Ben
1
Haskell和Mercury不能很好地回答这个问题的原因不是它们可以执行IO,所以不是纯声明式,而是它们分别是函数式和逻辑式,因此它们不是例子,即声明式语言既不是函数式也不是逻辑式。你似乎正在回答一个“声明式”的定义,这个定义必然排除了所有能用于实际工作的语言,这使得这个问题比Matt问的问题更不有趣。 - Ben
2
@Matt 函数式和逻辑编程语言的关键在于每种语言都基于一个形式化模型,该模型具有有效的算法来寻找解决方案。因此,程序员在模型中指定程序,语言实现负责找到解决方案。因此,如果您可以找到一个不太像λ演算或谓词演算的合适形式主义,那么您可能可以称基于该形式主义的语言为声明性但不是函数式或逻辑的。我不知道是否存在这样的形式主义,但我不知道为什么不应该有更多。 - Ben
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接