NS语言编程——惰性执行

惰性执行

以前在介绍无穷值的时候已经使用过惰性执行,惰性执行是一个过程值特征,使用惰性执行的过程值会将执行时间推迟,除了生成无穷值外惰性执行并不会改变程序运行结果,但合理使用惰性执行能够调整程序时间和空间使用状况,从而提升程序总体性能。算法

如下是惰性执行的使用例子:
1.按需生产有限或无限的数据。函数

lazy generate(f){
    return f()|generate(f);
}

2.库:性能

lazy Load_Math(){
    max = $(){}
    min = $(){}

    exp = $(){}
    log = $(){}
    ln = $(){}

    lazy Angle = $(){
        sin = $(){}
        cos = $(){}
        tan = $(){}
        atan = $(){}
        return math_angle_lib{sin:sin cos:cos tan:tan atan:atan}
    }
    return math_lib{max:max min:min exp:exp log:log ln:ln Angle:Angle()}
}

Math = Load_Math() ;
...
Math.max();
Math.Angle.sin()

咱们使用命名来区分库函数和自定义函数,Load_Math是一个惰性过程,所以在程序开头导入库时并不会当即执行,此时只用了一个变量的内存空间。只有当Math.max()调用时,Load_Math才会绑定到对应过程值而后开始执行,执行时内存空间中建立了max、min、exp、log、ln、Angle六个变量以及与之对应的过程值和一个结构值,当执行完必后,变量占用的空间即可以被回收,过程值和结构值则绑定到了变量Math,生命周期与Math相同。因为其中Angle是个惰性函数,Math.Angle此时一样只占用一个变量的内存空间,而当Math.Angle.sin被调用时,Math.Angle才会绑定到对应过程值并开始执行。优化

3.优化
emmm...我也想写一个惰性优化算法的例子...惋惜我写不出来0 0code

相关文章
相关标签/搜索