什么编程语言支持懒惰评估?

时间:2013-12-19 07:26:07

标签: lazy-evaluation

我想试试懒惰的表情评估,但我现在不想深入Haskel。请帮助您查找其他语言有哪些功能?

2 个答案:

答案 0 :(得分:4)

您可以用多种语言模拟它。例如,this是C ++的通用惰性求值器。正如文章所说,它也受.NET语言的支持(这就是文章试图模仿的内容) 例如,C ++表达式模板是惰性求值的另一种形式。

答案 1 :(得分:3)

Python的生成器是懒惰的。

任何数据流语言都是懒惰的。

还有Lazy Racket。 Racket是Scheme衍生品。

SWI Prolog有freeze predicate,它会暂停对逻辑变量的评估,直到需要它为止。这样:

fibs(X):- X = [0,1|Z], genfibs(X, Z).

genfibs([A|Y], Z):- Y = [B|Z], freeze(Z, (C is A+B, Z = [C|W], genfibs(Y, W))).

测试:

  

13? - fibs(X),长度(A,15),附加(A,_,X),writeln(A)。
  [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377]
<子>   冻结(_G2517,(_ G2582是233 + 377,_G2517 = [_ G2582 | _G2595],genfibs([377 | _G2517],_ G2595)))。

这是Haskell的翻译

fibs = x where x = 0 : 1 : (gen x)
               gen (a: y@(b:_)) = (a+b) : (gen y)