Io和Ruby被称为命令式语言(imperative language),这需要给出解决问题的具体步骤;
Prolog是一种声明式编程语言(decalarative language)。你向Prolog提供一些事实(fact)和推论(inference),并让它为你推断。
Prolog是最早成功的逻辑编程语言之一。你使用纯逻辑设置断言,Prolog判定它们是否为真。你可以在断言中留出空白,Prolog讲尝试填充这些空白并使那些不完整的事实变为真。
事实:事实是关于真实世界的基本断言。(Bebe是头猪,猪喜欢泥巴)
规则:规则是关于真实世界中一些事实的推论。(如果一个动物是猪,那么它喜欢泥巴)
查询:查询是关于真实世界的一个问题。(Bebe喜欢猪吗?)
收集和整理逻辑;
用程序表达逻辑;
找出所有可能的解决方法;
通过程序验证这些可能的解决方法;
声明式的编程模型非常有魅力。一般来说,如果你能把问题描述出来,你就可以解决这个问题。(把如何去解决都交给电脑来处理)
它不会给我们一个不完整的解决方法或者给出任何有关哪里有过度限制的信息。(要么是符合限制的完美结果,要么是no)
这是一个极其强大的概念,无需描述问题的解决方案,只需描叙问题;而且它使用逻辑描述问题,只是用纯逻辑!
代码:
valid([]). valid([Head|Tail]) :- fd_all_different(Head), valid(Tail). sudoku(Puzzle,Solution) :- Soulution = Puzzle, Puzzle = [S11,S12,S13,S14, S21,S22,S23,S24, S31,S32,S33,S34, S41,S42,S43,S44], fd_domain(Solution,1,4), Row1 = [S11,S12,S13,S14], Row2 = [S21,S22,S23,S24], Row3 = [S31,S32,S33,S34], Row4 = [S41,S42,S43,S44], Col1 = [S11,S21,S31,S41], Col2 = [S12,S22,S32,S42], Col3 = [S13,S23,S33,S43], Col4 = [S14,S24,S34,S44], Square1 = [S11,S12,S21,S22], Square2 = [S13,S14,S23,S24], Square3 = [S31,S32,S41,S42], Square4 = [S33,S34,S43,S44], valid([Row1,Row2,Row3,Row4, Col1,Col2,Col3,Col4, Square1,Square2,Square3,Square4]).
自然语言处理,它是第一种用于进行语言识别的语言。特别是,Prolog语言模型可以采用自然语言,应用基于事实和推论的知识库,并且可以用具体的适于计算机的规则表达那些复杂的不精确的语言。
游戏:游戏AI,对不同的情况有不同的行为。。
语义网??(没听说过):是为网络上的服务与信息提供附加含义的一种尝试。??
人工智能:这个不用说明了,从一开始就觉得这个领域就是Prolog的了。
调度,擅长处理有限资源。可以实现操作系统调度器等。
功用:擅长核心领域,(逻辑编程)会有一些语言设计的限制
超大数据集合:Prolog使用了一个深度优先搜索的决策树,它使用所有可能的组合与规则集合相匹配,并且其编译器对这个过程做了很好的优化。不过,这个策略需要大量的计算,特别是当数据集规模非常大的时候。这使得Prolog用户必须理解语言的工作原理以保证数据集的规模在可控制范围内。
混合命令式和声明式模型:必须经常使用尾递归规则去完成中等规模的问题。构建一个基于小数据集但无法扩展飞Prolog应用相对容易,但必须深入立即Prolog的工作原理才能更有效率的设计出在可接受的层次上进行扩展的规则。