阴影和嵌套函数 [英] Shadowing and Nested function

查看:17
本文介绍了阴影和嵌套函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想了解Shadowing和Nested函数的机制是如何工作的.例如:

I want to understand how the mechanism of Shadowing and Nested function work. For example:

let func y =
    let dup y = y + y
    let z = dup y
    let dup y =
        let dup z =
            let y = y * z
            y
        let z = y
        y
    dup z + z;;

val func : int -> int

> func 3;;
val it : int = 12

有人能解释一下这里发生了什么吗?

Can someone explain what happen here?

推荐答案

您的代码等效于以下内容,其中我只是对您姓名的实例进行了编号,以帮助您直观地了解阴影是如何发生的.

Your code is equivalent to the following, where I've simply numbered instances of your names to help you visualize how shadowing is occurring.

let func y0 = 
  let dup0 y1 = y1 + y1
  let z0 = dup0 y0
  let dup1 y2 = 
    let dup2 z1 = 
      let y3 = y2 * z1 
      y3
    let z2 = y2 
    y2 
  dup1 z0 + z0

当然,这可以进一步简化.由于 dup2z2 从未使用过,dup1 等价于 let dup1 y2 = y2,整个函数相当于

This can be further simplified, of course. Since dup2 and z2 are never used, dup1 is equivalent to let dup1 y2 = y2, and the whole function is equivalent to

let func y0 =
  let dup0 y1 = y1 + y1
  let z0 = dup0 y0
  dup1 z0 + z0

相当于

let func y0 =
  let z0 = y0 + y0
  z0 + z0

通过替换.这与

let func y0 = 4 * y0

这有帮助吗?

这篇关于阴影和嵌套函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆