功能规划:价值的等价性和评价

时间:2015-08-14 15:21:55

标签: functional-programming sml

我正在阅读关于SML的一些注释,并且对作者的一个评论感到有些困惑。让e ~ e'表示对值的评估e 表示e'在某种程度上等同于e ~ e'

作者写道:

  

如果t(类型v都有)且类型为t s.t的SML值为e ~ vv',然后有一个SML值t(同样类型为e' ==> v'),s.t。 v ~ v'e ~ e'

     

请务必注意(并理解为什么我们在此处说e ~ ve' ==> 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>

为什么不呢?

2 个答案:

答案 0 :(得分:2)

因为这意味着两者都会降低到相同的语法值。但是,扩展平等与句法平等并不相同。粗略地说,它意味着程序无法区分这些值。

特别注意函数表达式本身就是值。但是具有不同实体的不同函数值可能仍然在扩展上相等,因为它们在应用于相同参数时计算相同的结果。琐碎的例子:

aws configure list --profile foo

fun x => x

是两个在语法上不同但在扩展上相等的值。

答案 1 :(得分:1)

如果您开始使用ee'已成为值vv',则第二个声明会说

  

如果v ~ v'和v ~ v,则v' ==> v

可以简化为

  

如果v ~ v',则v' ==> v

与扩展性完全相反,因为你可以有例如。

v = fn x => x + 0
v' = fn x => x

不是相同的值,但在扩展上是相等的。