程序原本(四十八):程序设计的核心思想——执行体与它在执行过程中的环境(一门语言与一个程序的区别,仅在于参考环境的差异——后者被称为运行时环境 (Runtime))

阅读数:41 2019 年 9 月 28 日 18:30

程序原本(四十八):程序设计的核心思想——执行体与它在执行过程中的环境(一门语言与一个程序的区别,仅在于参考环境的差异——后者被称为运行时环境(Runtime))

对于ship()来说,所谓合适的条件就是类似这样的一个上下文环境:

复制代码
_ship_env_0: {
people: {
row: /* 划水 */
},
water: /* 水 */,
checkShore: /* 检测岸 */
}

我们来考虑类似环境的可能性。例如,假设我们将原始问题中的“水”和“检测岸”确定下来,则ship将可能有许多种方案。如:

复制代码
_ship_env_1: {
water: /* 水 */,
checkShore: /* 检测岸 */,
ship: function(people) {
// people.row 的可能性是无穷的
}
}

假设我们也将“人”确定下来,那么方案就只剩下一种:

复制代码
_ship_env_2: {
water : /* 水 */,
checkShore: /* 检测岸 */,
people: /* 人 */,
ship: function() { ... }
}

除非我们——人——能有不同样的row()方法。

在从_ship_env_0_ship_env_1的演变过程中,我们把ship()和它相关的环境_ship_env绑定在了一起。这是一个不小的变化,因为它的含义是语义与语用之间的绑定关系。如果我们将_ship_env分离出去,则ship()将是 DSL(领域特定语言,Domain Specific Languages)的一个实现;如果将_ship_envship()绑在一起,那么ship()就是一个应用程序中的确定求解。

前者创建了一门语言,后者创建了一个程序。

评论

发布