在哪些问题上,Prolog比Haskell更擅长解决?这两种语言的主要区别是什么?
编辑
是否有一种Haskell库(一种逻辑求解器),可以模仿Prolog的功能?
在哪些问题上,Prolog比Haskell更擅长解决?这两种语言的主要区别是什么?
编辑
是否有一种Haskell库(一种逻辑求解器),可以模仿Prolog的功能?
Prolog主要是面向AI和语言领域的逻辑问题的语言。Haskell更多地是通用编程语言。
Prolog是一种声明式(逻辑)语言,这使得在其中陈述逻辑问题更容易。Haskell是一种函数式语言,因此更适合计算问题。
维基百科关于声明式编程的定义:
在计算机科学中,声明式编程是一种编程范式,它表达了计算的逻辑而不描述其控制流。它试图通过描述程序应该完成什么来最小化或消除副作用,而不是描述如何执行。这与命令式编程相反,后者需要详细描述要运行的算法。
声明式编程将程序视为形式逻辑的理论,将计算视为该逻辑空间中的推导。声明式编程最近变得特别有趣,因为它可以极大地简化编写并行程序。
维基百科关于函数式编程的定义:
简而言之,声明式语言声明一组关于哪些输入应该产生哪些输出的规则,并使用这些规则从输入中推导出输出,而函数式语言声明一组数学或逻辑函数,这些函数定义了输入如何转换为输出。在计算机科学中,函数式编程是一种编程范式,它将计算视为数学函数的评估,并避免状态和可变数据。它强调应用函数,而不是强调状态的变化,这与命令式编程风格相反。函数式编程的根源在于λ演算,这是在20世纪30年代开发的一种形式系统,用于研究函数定义、函数应用和递归。许多函数式编程语言可以看作是对λ演算的修饰。
关于ADDED问题:我不知道有什么,但您可以将Haskell翻译成Prolog,或者在Haskell中实现Prolog :)
Prolog是一种逻辑编程语言,而Haskell则是一种函数式语言。函数式语言基于一个函数的概念,它接受若干参数并计算出一个值。
相比之下,Prolog没有函数的概念。相反,谓词用于证明一个“定理”。Prolog谓词不会计算一个值,它们可以回答“是”或“否”,并且可以可选地将输入变量绑定到值:
函数式和逻辑编程的实用性通常重叠。最近函数式编程已经得到了相当大的关注,而Prolog仍然是一种小众语言,这很大程度上是由于它与主流面向对象编程中常见的函数和方法的概念非常不同,往往被认为学习(非常)困难。
在Prolog中,某些问题变得几乎可以轻松实现,特别是与约束求解器结合使用。
您可以在Wikipedia上了解更多关于逻辑编程的知识。
你可能会发现这篇论文《Escape from Zurg: 逻辑编程练习》很有趣。它展示了在Prolog和Haskell中实现简单搜索问题的对比,并提供了一个用于更普遍地表示搜索问题的类型类框架。作者得出的结论是,在Haskell中表达这些类型的问题比在Prolog中容易,主要是因为Haskell类型系统使得更容易从状态到状态推导出良好的搜索状态和移动的表示方式。
trans/4
:使用了append/3
。一个熟悉Prolog的程序员会把列表放在头部,使其成为常量操作,而不是每个答案都线性操作。 - false实际上只有两种语言:
中间的所有其他语言都只是翻译工具,仅此而已。当我们使用机器语言时,我们必须像机器一样思考,而使用人类语言时则要像人类一样思考。
程序员的真正工作是双向思考。一些编程工具(如汇编器)迫使程序员花费更多时间像机器一样思考。而其他工具(如Prolog)则允许我们花费更多时间像人类一样思考。
在每个极端都需要付出代价,无论是性能还是成本。
如果您的应用程序的业务逻辑可以简化为一组规则,并将其输出转换为一组目标(例如编写国际象棋游戏),那么Prolog是理想的选择。另一方面,如果您需要将输入告诉计算机如何计算输出,则函数式语言更为合适。