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