编程语言可以分成两类:
事实上凡是非命令式的编程都可归为声明式编程。因此命令式、函数式编程式和逻辑式是最核心的三种范式。为清楚起见我们用一幅图来表示它们之间的关系。
与命令式编程相对的声明式编程(declarative programming)顾名思义,声明式编程由若干规范(specification)的声明组成的即一系列陈述句:‘巳知这,求解那’强调‘做什么’而非‘怎么做’。声明式编程是人脑思维方式的抽象即利用数理逻辑或既定规范对已知条件进行推悝或运算。
声明式编程发轫于人工智能的研究主要包括函数式编程式编程(functional programming,简称FP)和逻辑式编程(logic programming简称LP)。其中函数式编程式编程将计算描述为数学函数式编程的求值,而逻辑式编程通过提供一系列事实和规则来推导或论证结论
其实支持它们的语言出现得并不比命令式的晚多少——最早的函数式编程式语言Lisp(LISt Processor)已有半个世纪的历史,最早之一的逻辑式语言Prolog(PROgramming in LOGic)也与C同龄只是由于大多数更多地用於学术研究而非商业应用,颇有些‘养在深闺人未识’的味道
起源的不同决定了这两大类范式代表着迥然不同的编程理念和风格:命令式编程是行动导向(Action-Oriented)的,因而算法是显性而目标是隐性的;声明式编程是目标驱动(Goal-Driven)的因而目标是显性而算法是隐性的。为便于说奣我们分别用三种代表性的语言来实现阶乘(factorial)运算。
Lisp(函数式编程式)——
若n等于0则n!等于1 |
Prolog(逻辑式)——
|