Haskell的懒惰是否在编辑中得到保留?

时间:2017-02-24 22:21:53

标签: haskell functional-programming

所以我对这整个函数式编程交易都很陌生。在我最近学习Haskell的冒险中,我遇到了一个奇怪的问题。我知道GHC互动环境允许所谓的“懒惰”#34;评估,这意味着只在需要值时才评估Haskell表达式。这听起来像是一个非常有用的行为,因为它可以帮助简化优化过程。我的下一个逻辑思路是:那么当Haskell编译成机器代码时会发生什么?你是否失去了懒惰?它变成了“必要的”#34;码?

1 个答案:

答案 0 :(得分:5)

可以肯定的是,在当代硬件上,Haskell代码最终变成了命令式代码,即汇编代码,这是必不可少的。

这并不意味着懒惰必须消失,事实上并非如此。请注意,可以使用命令式语言对惰性数据结构进行建模。例如,可以执行以下操作来为惰性值列表建模(注意:我说现有的Haskell实现就是这样做的,我只想展示如何< / em>完成):

struct List {
    Value *val;
    struct {
        bool evaluated;
        union {
            struct List *list;
            struct List *(*eval)();
        } ptr;
    } next;
};

因此,每当需要转到列表的尾部时,可能有一个已经计算过的指针(next.ptr.list),或者只是一个指向计算这样一个指针的函数的指针({{ 1}})。