宣告式编程(英语:Declarative programming)或译为声明式编程,是对与指令式编程不同的编程范型的一种合称。它们建造计算机程序的结构和元素,表达计算的逻辑而不用描述它的控制流程[1]。
概述
常见的宣告式语言包括:资料库查询语言如SQL的查询子集和XQuery,正则表达式,配置管理系统如Puppet管理配置语言。归入这种范型的很多语言,描述问题领域内目标的性质,让电脑明白目标,而非流程,从而尝试极小化有关的副作用[2]。而指令式编程则需要用语言原语来明确的指出每一步该怎么做[3]。
可归入声明式编程范型的领域专属语言(DSL)还包括:yacc语法解析器,编译说明语言Make等。DSL不需要是图灵完全的,往往容易以一种纯声明式的方式来表达。很多文本标记语言例如HTML、MXML、XAML和XSLT往往是声明式的。
定义
声明式编程,通常被定义为除指令式以外的任何编程范型。同时存在一些其他的定义,简单的将宣告式编程和命令式编程做对比,例如:
这些定义存在着一些重合。
子编程范型
声明式编程是一个笼统的概念,除了一些特定的领域专属语言之外,一些更加知名的编程范型也被归类为其子范型。
逻辑编程通常被看做是形式逻辑的理论,把计算看做推导,透过函数、推理规则或重写规则,来描述变数之间的关系。它的语言执行器(编译器或解释器)采用了一个固定的算法,以从这些关系产生结果。作为典型代表的Prolog语言,声明关系并且对关系进行提问;它和许多逻辑编程语言,都允许副作用的存在。
函数式编程,尝试最小化状态带来的副作用,因此可以被归类入宣告式编程,它现在因大幅简化了并行计算的编写难度而备受关注[5]。除了纯函数式编程语言如Haskell,多数函数式编程语言如Scheme、Clojure、OCaml、Standard ML等,允许副作用的存在。
在约束式编程中,变量之间的关系是在约束中说明的,定义了问题的解的范围。这些约束然后被应用程序来求解,以使得每个变量获得一个值,并让最多的约束得到满足。约束式编程经常被用作函数式编程、逻辑编程甚至指令式编程的补充,用来解决人工智能中的约束满足问题。
参见
参考
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.