可表达与可表示的价值
Expressible vs denotable values
哪种编程语言具有可表达但不可表示的价值。还有这意味着什么?
我真的不明白其中的区别。目前我认为它意味着一种函数式语言,因为那样你就不能给变量值只指向它们?
这是完全错误的吗?
根据大卫·施密特 these lecture notes 的说法:
可表达的值 是可以通过代码中的表达式产生的值,例如字符串、数字、lambdas/anonymous 函数(在支持它们的语言中)等
可表示的值 是可以命名(绑定到标识符)并在以后引用的值,例如变量或命名函数的值。
例如,一种语言可以有声明命名函数的语法,但没有匿名函数的表达式语法。所以(如果我理解正确的话)在这种语言中,函数将是 可表示但不可表达的 .
我能找到的 值 可表达但不可表示的唯一示例是错误值(在some theoretical languages p.11),它可以由表达式(如1/0
)生成,但不能绑定到标识符(保存在多变的)。
(假设赋值语句传播错误而不是简单地将错误值存储在变量中。)
匿名类型也有些相似。例如在 C# 中,你可以定义一个匿名对象,它有一个不能绑定到标识符的匿名类型(不可表示):
// anonymous objects can only be saved into a variable by using type inference
var obj = new { Name = "Farah", Kind = "Human" };
哪种编程语言具有可表达但不可表示的价值。还有这意味着什么? 我真的不明白其中的区别。目前我认为它意味着一种函数式语言,因为那样你就不能给变量值只指向它们? 这是完全错误的吗?
根据大卫·施密特 these lecture notes 的说法:
可表达的值 是可以通过代码中的表达式产生的值,例如字符串、数字、lambdas/anonymous 函数(在支持它们的语言中)等
可表示的值 是可以命名(绑定到标识符)并在以后引用的值,例如变量或命名函数的值。
例如,一种语言可以有声明命名函数的语法,但没有匿名函数的表达式语法。所以(如果我理解正确的话)在这种语言中,函数将是 可表示但不可表达的 .
我能找到的 值 可表达但不可表示的唯一示例是错误值(在some theoretical languages p.11),它可以由表达式(如1/0
)生成,但不能绑定到标识符(保存在多变的)。
(假设赋值语句传播错误而不是简单地将错误值存储在变量中。)
匿名类型也有些相似。例如在 C# 中,你可以定义一个匿名对象,它有一个不能绑定到标识符的匿名类型(不可表示):
// anonymous objects can only be saved into a variable by using type inference
var obj = new { Name = "Farah", Kind = "Human" };