nam*_*ame -1 haskell functional-programming
所以我对这整个函数式编程交易都不熟悉.在我最近学习Haskell的冒险中,我遇到了一个奇怪的问题.我知道GHC交互环境允许所谓的"懒惰"评估,这意味着只在需要它们的值时才评估Haskell表达式.这听起来像是一个非常有用的行为,因为它可以帮助简化优化过程.我的下一个逻辑思路是:那么当Haskell编译成机器代码时会发生什么?你是否失去了懒惰?它变成了"命令式"代码吗?
可以肯定的是,在当代硬件上,Haskell代码最终变成了命令式代码,即汇编代码,这是必不可少的.
这并不意味着懒惰必须消失,事实上并非如此.请注意,可以使用命令式语言对惰性数据结构进行建模.例如,一个可以做到以下几点来模拟值的懒列表(注:我不是说现有的哈斯克尔实现这样做的,我只是想表明它如何能做到):
struct List {
Value *val;
struct {
bool evaluated;
union {
struct List *list;
struct List *(*eval)();
} ptr;
} next;
};
Run Code Online (Sandbox Code Playgroud)
因此,每当需要转到列表的尾部时,可能有一个已经计算过的指向它的指针(next.ptr.list
),或者只是一个指向计算这样一个指针(next.ptr.eval
)的函数的指针.