有两个答案提到了电子表格编程。如果电子表格编程(又名公式)不能访问可变的 全球性的状态,那么它就是宣告式编程。这是因为可变的单元格值是 main()(整个程序)的整体 输入和 输出。在执行每个公式后,新值不会写入单元格,因此在声明性程序的生命周期内(执行电子表格中的所有公式) ,它们是不可变的。因此,相对于彼此,公式将这些可变单元视为不可变的。RT 函数允许访问 永恒不变全局状态(以及 Mutable < em > local state 可变 < em > 本地 状态)。
通常,我们可以通过添加上下文将命令式转换为声明式。例如“向左转。右转“ Bob 会在11点01分,在 Foo 和 Bar 的十字路口左转”。Bob 会在11:06在 Bar 和 Baz 的十字路口右转注意,在后一种情况下,句子是幂等和可交换的,而在前一种情况下,重新排列或重复句子将严重改变程序的意义。
关于 单调,声明可以添加减去 可能性的 约束。但是约束仍然会添加信息(更准确地说,约束就是信息)。如果我们需要时变声明,典型的做法是使用显式的时间语义对其进行建模——例如,从“球是平的”到“球在时间 T 处是平的”。如果我们有两个相互矛盾的声明,我们就有一个不一致的声明系统,尽管这可以通过引入 软弱约束(优先级、概率等)或利用一个次协调逻辑来解决。
超文本标记语言(HyperText Markup Language,简称 HTML)ーー静态网页的语言ーー是一种高度(但不完美的 3)声明性语言的例子,这种语言(至少在 HTML 5之前)没有表达动态行为的能力。HTML 也许是最容易学的语言。对于动态行为,命令式脚本语言(如 JavaScript)通常与 HTML 结合使用。没有 JavaScript 的 HTML 符合声明性定义,因为每个名义类型(即标记)在语法规则的组合下保持其一致的含义。