Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl6 – 为什么Perl 6只在两种类似的情况中尝试评估无限列表?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我使用REPL上的三角形缩减定义了一个惰性无限数组,并在前面粘贴了一个元素:
> my @s = 0,|[\+] (1,2 ... *)
[...]

我可以打印出前几个元素:

> @s[^10]
(0 1 3 6 10 15 21 28 36 45)

我想在缩小中移动零元素,如下所示:

> my @s = [\+] (0,|(1,2 ... *))

然而,作为对此的回应,REPL挂起,大概是通过尝试评估无限列表.

如果我在单独的步骤中执行它,它的工作原理:

> my @s = 0,2 ... *)
[...]
> ([\+] @s)[^10]
(0 1 3 6 10 15 21 28 36 45)

为什么不这样做不起作用……工作?

解决方法

简短回答:

这可能是一个错误.

答案很长:

(1,2 … *)产生一个懒惰的序列,因为它显然是无限的,但不知何故,这并没有使得结果序列被标记为惰性.

将序列放入数组@s会导致它被急切地评估,除非它被标记为惰性.

快速解决:

在前面添加懒惰.

> my @s = [\+] lazy 0,2 ... *)
[...]
> @s[^10]
(0 1 3 6 10 15 21 28 36 45)

大佬总结

以上是大佬教程为你收集整理的perl6 – 为什么Perl 6只在两种类似的情况中尝试评估无限列表?全部内容,希望文章能够帮你解决perl6 – 为什么Perl 6只在两种类似的情况中尝试评估无限列表?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。