這裏是採取最後一個元素我的代碼,但是,我有不知道怎麼回事錯了,這裏是我的代碼:力圖從列表(哈斯克爾)
ll :: [a] -> a
ll lis = case lis of
(_:xs) -> ll xs
[] -> error"xx"
並沒有來自終端的錯誤消息: 但是當我運行「ll [1,2,3]」時,我想得到「3」,但是,我得到「*例外:xx」的結果。
誰願意告訴我它有什麼問題?謝謝XD
這裏是採取最後一個元素我的代碼,但是,我有不知道怎麼回事錯了,這裏是我的代碼:力圖從列表(哈斯克爾)
ll :: [a] -> a
ll lis = case lis of
(_:xs) -> ll xs
[] -> error"xx"
並沒有來自終端的錯誤消息: 但是當我運行「ll [1,2,3]」時,我想得到「3」,但是,我得到「*例外:xx」的結果。
誰願意告訴我它有什麼問題?謝謝XD
我發現它有助於開始與遞歸的基本情況:
ll [x] = x
然後遞歸:
ll (_:xs) = ll xs
當然給人一種有用的錯誤消息的是良好的作風。這是很方便的做到這一點。最後,任何情況下,匹配時:
ll _ = error "empty list"
作爲獎勵的WTF!?!版本:
import Data.List
ll = foldl' (flip const) (error "empty list")
你可以稱之爲flip const
的「老年癡呆症的功能」,它只是忘記了它的第一個參數和返回第二個,並作爲foldl'
挖在列表中從左至右,它會給你的最後一個元素。
這很聰明!我希望我不會忘記阿爾茨海默氏症的樂趣 – zurgl
有什麼不對的最後一個函數? http://zvon.org/other/haskell/Outputprelude/last_f.html –
想到一個表達式,它會在遞歸到達空列表之前捕獲最後一個元素(在'(_:xs) - > ll xs '。 –
@groovy,得到它,問題解決了,thx man XD – libra