void addElem(std::vector& vec, int a) { vec.insert(a); }
这个函数显然不会使用比传递对象已经占用的更多的内存。
但在Haskell中,同样的功能将变成这样:
addElem :: [Int] -> Int -> [Int] addElem xs a = xs ++ [a]
现在,在这个计算中,由于xs的值没有发生变化,所以我说这个函数在某个时候将消耗掉两倍大小的内存,一个为xs,另一个为返回值。或者,惰性调用确保实际上只通过在末尾添加一个元素来返回xs吗?
我知道Monad是一种具有副作用的方法。但是Monad能否用于简单地修改输入并返回其值?同时,将xs ++ [a]更改为a:xs是否会消耗更少的内存?