可表示值与可表示值

时间:2019-03-29 22:18:39

标签: functional-programming programming-languages

哪种编程语言具有可表示但不能表示的值。这也意味着什么? 我真的不明白区别。目前,我认为这意味着一种功能语言,因为那样您就不能仅给变量值指向它们吗? 这是完全错误的吗?

1 个答案:

答案 0 :(得分:0)

根据David Schmidt的these lecture notes

可表达的值是可以由代码中的表达式生成的值,例如字符串,数字,lambda /匿名函数(以​​支持它们的语言)等。

有意义的值是可以命名(绑定到标识符)并在以后引用的值,例如变量或命名函数的值。

例如,一种语言可以具有用于声明命名函数的语法,而对于匿名函数则没有表达式语法。因此,(如果我正确理解的话)用这种语言,函数将是可表示的,但不能表达

我能找到的唯一表示可表达但不可表示的示例是错误值(在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" };