我正在寻找stackoverflow Non-Trivial Lazy Evaluation,这让我想到了Keegan McAllister的演讲:为什么要学习Haskell.在幻灯片8中,他显示了最小功能,定义为:
minimum = head . sort
Run Code Online (Sandbox Code Playgroud)
并指出其复杂性为O(n).我不明白为什么如果通过替换排序是O(nlog n),复杂性被认为是线性的.帖子中引用的排序不能是线性的,因为它不假设数据的任何内容,因为线性排序方法需要它,例如计数排序.
懒惰的评价在这里发挥着神秘的作用吗?如果是这样,背后的解释是什么?
我想提出一个接受列表并返回两个列表的功能:第一个是包含每个奇数项和第二个包含每个偶数项.
例如,给定[1;2;4;6;7;9],我想回来[ [1;4;7] ; [2;6;9] ].
到目前为止我写过这篇文章,我不知道如何进步.
let splitList list =
let rec splitOdd oList list1 list2 =
match oList with
| [] -> []
| head :: tail -> splitEven tail (list1::head) list2
and splitEven oList list1 list2 =
match oList with
| [] -> []
| head :: tail -> splitOdd tail list1 (list2::head)
splitOdd list [] []
Run Code Online (Sandbox Code Playgroud)