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