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