我想试试懒惰的表情评估,但我现在不想深入Haskel。请帮助您查找其他语言有哪些功能?
答案 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)