我正在阅读关于SML的一些注释,并且对作者的一个评论感到有些困惑。让e ~ e'
表示对值的评估e
表示e'
在某种程度上等同于e ~ e'
作者写道:
如果
t
(类型v
都有)且类型为t
s.t的SML值为e ~ v
。v'
,然后有一个SML值t
(同样类型为e' ==> v'
),s.t。v ~ v'
和e ~ e'
。请务必注意(并理解为什么我们不在此处说
e ~ v
和e' ==> v
然后<div class="row"> <div class="col-xs-6 col-sm-4">Total cost</div> <div class="col-xs-6 col-sm-4"></div> <div class="clearfix visible-xs-block"></div> <div class="col-xs-6 col-sm-4">$42</div> </div>
。
为什么不呢?
答案 0 :(得分:2)
因为这意味着两者都会降低到相同的语法值。但是,扩展平等与句法平等并不相同。粗略地说,它意味着程序无法区分这些值。
特别注意函数表达式本身就是值。但是具有不同实体的不同函数值可能仍然在扩展上相等,因为它们在应用于相同参数时计算相同的结果。琐碎的例子:
aws configure list --profile foo
和
fun x => x
是两个在语法上不同但在扩展上相等的值。
答案 1 :(得分:1)
如果您开始使用e
且e'
已成为值v
和v'
,则第二个声明会说
如果
v ~ v
'和v ~ v
,则v' ==> v
可以简化为
如果
v ~ v'
,则v' ==> v
与扩展性完全相反,因为你可以有例如。
v = fn x => x + 0
v' = fn x => x
不是相同的值,但在扩展上是相等的。