我对练习感到有些困惑。 exercice要求一个函数,它将从列表中取出最后一个元素,并将此代码显示为正确的答案。
myButLast :: [a] -> a
myButLast = last . init
myButLast' x = reverse x !! 1
myButLast'' [x,_] = x
myButLast'' (_:xs) = myButLast'' xs
myButLast''' (x:(_:[])) = x
myButLast''' (_:xs) = myButLast''' xs
myButLast'''' = head . tail . reverse
但我刚刚这样做了,它只是按照要求工作了
myButLast' = init[1,2,3,4]
myButLast'' = last myButLast'
第一个解决方案中的所有额外代码是什么?
答案 0 :(得分:5)
示例代码显示了实现myButLast
的5种不同方式。请注意,myButLast
和myButLast'
功能完全不同。
关于你的答案 - 你的直觉是正确的,但你的功能只处理一个输入 - [1,2,3,4]
。相反,您可以传递任何列表:
myButLast' xs = init xs
myButLast'' = last myButLast'
合并它们并添加类型签名:
myButLast :: [a] -> a
myButLast xs = last $ init $ xs
哪种无点样式与第一种解决方案相同:
myButLast :: [a] -> a
myButLast = last . init