Functional programming 逻辑编程的最佳用途是什么?
逻辑编程指的是声明式编程语言的子范式。不要把这个问题和“如果有,你能解决什么问题?”Functional programming 逻辑编程的最佳用途是什么?,functional-programming,prolog,logic,logic-programming,minikanren,clpfd,clpb,clpq,Functional Programming,Prolog,Logic,Logic Programming,Minikanren,Clpfd,Clpb,Clpq,逻辑编程指的是声明式编程语言的子范式。不要把这个问题和“如果有,你能解决什么问题?” 像Prolog这样的语言非常吸引人,为了学习而学习是值得的,但我想知道哪一类真实世界的问题用这种语言表达和解决得最好。有更好的语言吗?在更流行的编程语言中,逻辑编程是否以另一个名称存在?这个答案的愤世嫉俗的版本是Prolog的一个变种吗?Prolog免费提供给您的一个东西是回溯搜索算法——您可以自己实现它,但如果您的问题最好通过使用该算法来解决,那么使用它就很好了 我看到它擅长的两件事是数学证明和自然语言理解。
像Prolog这样的语言非常吸引人,为了学习而学习是值得的,但我想知道哪一类真实世界的问题用这种语言表达和解决得最好。有更好的语言吗?在更流行的编程语言中,逻辑编程是否以另一个名称存在?这个答案的愤世嫉俗的版本是Prolog的一个变种吗?Prolog免费提供给您的一个东西是回溯搜索算法——您可以自己实现它,但如果您的问题最好通过使用该算法来解决,那么使用它就很好了 我看到它擅长的两件事是数学证明和自然语言理解。原型设计 Prolog是动态的,已经有50年的历史了。编译器是自由的,语法是最低限度的,而且“做事”简单、有趣、高效。SWI Prolog有一个内置的,甚至是一个。您可以使用
make/0
动态更改代码,可以动态加载模块,在不离开解释器的情况下添加几行代码,或者使用edit(1)
编辑当前正在运行的文件。您认为您发现了foobar/2
谓词的问题吗
?- edit(foobar).
一旦你离开编辑器,它就会被重新编译。当然,Eclipse对Java也做同样的事情,但Java并不完全是一种原型语言
除了纯粹的原型设计之外,Prolog非常适合将一段逻辑转换成代码。因此,自动校准器和这类东西可以很容易地用Prolog编写
第一个Erlang解释器是用Prolog编写的,这是有原因的,因为Prolog非常适合解析和编码解析树中的逻辑。事实上,Prolog附带了一个内置的解析器!不,不是一个库,它是在语法中,即s
Prolog在NLP中被大量使用,特别是在语法和计算语义方面
但是,Prolog没有得到充分利用和重视。不幸的是,它似乎带有学术或“无法用于任何实际目的”的污名。但是,它可以很好地应用于涉及事实和计算事实之间关系的许多实际应用中。它不太适合数字运算,但CS不仅仅是数字运算。Prolog非常适合非数字问题。下面给出了一些Prolog应用程序的示例,它可能会帮助您了解它可能解决的问题类型。Prolog非常擅长解决难题等。这就是说,在解谜领域,它使简单/中等解谜更容易,复杂解谜更难。尽管如此,为网格谜题等编写解算器并不特别困难。一个简单的答案是“构建系统”。用于构建makefile的语言(至少是描述依赖关系的部分)本质上是一种逻辑编程语言,尽管它不是真正的“纯”逻辑编程语言。因为Prolog=++ 大多数使用语法统一的地方也是Prolog的一个很好的用途 句法统一使用
- AST变换
- 类型推断
- 术语重写
- 定理证明
- 自然语言处理
- 模式匹配
- 组合测试用例生成
- 从结构化数据(如XML文档)提取子结构
- 符号计算,即微积分
- 演绎数据库
- 专家系统
- 人工智能
- 解析
- 查询语言
- CLP(FD)对于整数
- CLP(B)适用于布尔人
- CLP(Q)对于rational数字
- CLP(R)用于浮点数
- 日程安排
- 资源分配
- 规划
- 组合优化
- SAT解决方案
- 电路验证
- 组合计数
- 线性规划
- 整数线性规划
- 混合