在许多系统中,
编辑: 我想扩展我的问题: 我不追求具体的转换,我只是想达到任何优化的目的。
head.reverse
需要与列表大小成比例的空间,而 last
则只需要常量空间。是否有系统可以执行这样的转换? 对于 reverse.take n.reverse
也是如此吗?编辑: 我想扩展我的问题: 我不追求具体的转换,我只是想达到任何优化的目的。
last
则为O(1)。 - falsetakeLast k xs
应该占用 O(1) 的空间(当然要打开优化 -O2)。它 的结果的使用者将决定下一部分的大小需求。例如,last (takeLast 5 xs)
总体上占用 O(1) 的空间。(再次说明,如果这是关于xs
的程序中唯一的语句,即没有其他消费者持有其中的某些其他部分)。-- 澄清:takeLast 5 xs
不是一个计算;它是一个定义。只有main
描述了整个计算。 - Will Ness