为什么Haskell中的懒惰评价“不是懒惰”?

时间:2015-06-20 08:13:52

标签: haskell lazy-evaluation

当我在cghi中尝试以下代码时:

1

我期待在我的终端上打印[[1,2,3,4,5,6,7,8,9,10,...而不是Exception in thread "main" java.lang.NullPointerException at java.util.Objects.requireNonNull(Objects.java:203) at java.util.Arrays$ArrayList.<init>(Arrays.java:3813) at java.util.Arrays.asList(Arrays.java:3800) at project.1.scavenger.listf(scavenger.java:19) at project.1.scavenger.listf(scavenger.java:30) at project.1.scavenger.listf(scavenger.java:30) at project.1.main(Project1.java:28) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds) 的结果。

为什么懒惰评估不起作用,因为我希望在这种情况下?

2 个答案:

答案 0 :(得分:10)

take的类型为Int -> [a] -> [a],即返回一个列表。看来你正在寻找head,它会返回一个元素。

head $ head $ repeat [1..]

答案 1 :(得分:6)

take 1 $ repeat [1..]返回[[1..]]。然后take 1 [[1..]]返回[[1..]],一个无操作。