这是一个关于 Haskell 列表模式返回的问题。
如果我返回一个与函数输入之一匹配的基于 cons 的列表模式,该函数是否返回对原始列表头部的引用,或者是否返回一个新列表,其中新头部指向原始列表的尾部列表?
我的理解是,如果一个函数的输入中有 (x:xs) 模式,则 x 将引用头值,xs 将引用原始列表的尾部,因此如果我返回 xs 它将返回对尾部节点的引用,跳过复制尾部内容的需要。
但是,如果我返回整个模式或模式的一部分,会发生什么情况?编译器是否识别输入模式并利用原始列表中的节点返回引用,或者是否为基于 cons 的前导元素启动一个新列表并仅重用尾部?
foobar (x:xs) = xs
Run Code Online (Sandbox Code Playgroud)
与
foobar (x:xs) = (x:xs)
Run Code Online (Sandbox Code Playgroud)
与
foobar (x:y:zs) = (y:zs)
Run Code Online (Sandbox Code Playgroud)