gpt4 book ai didi

functional-programming - 使用 Lazy.jl 在 Julia 中生成惰性范围

转载 作者:行者123 更新时间:2023-12-04 02:42:51 25 4
gpt4 key购买 nike

试图扩展 Lazy.jl 中的示例之一,我遇到了评估不懒惰的问题。

README 使用了这个例子:

> esquares = @>> Lazy.range() map(x->x^2) filter(iseven);

> esquares[99]
39204

我试图通过允许将过滤器指定为参数来使其动态化,但它最终评估了一个无限列表:

> squares(filt) = @lazy @>> Lazy.range() map(x->x^2) filter(filt); 

> squares(iseven)

(4 16 36 64 100 144 196 256 324 400 484 576 676 ... # this keeps printing until interrupting...)

我也试过:

> @lazy squares(iseven)  
(4 16 36 64 100 144 196 256 324 400 484 576 676 ... # this also immediately returns the infinite list

最佳答案

显示惰性对象需要访问其内容(尽管当前的 show 方法是否应该更改是有争议的),这就是为什么 ;esquares 示例非常重要。

考虑到这一点,您的代码可以正常工作:

julia> squares(filt) = @lazy @>> Lazy.range() map(x->x^2) filter(filt) # you don't need the `@lazy` here I think
squares (generic function with 1 method)

julia> squares(iseven);

julia> squares(iseven)[99]
39204

julia> squares(isodd)[99]
38809

关于functional-programming - 使用 Lazy.jl 在 Julia 中生成惰性范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com