作爲初學者練習,我已經實現了以下功能找到的第n個元素的列表:Haskell代碼是否有效?
elem_at (h:_) 0 = h
elem_at (_:t) n = elem_at t (n-1)
elem_at _ _ = error "Index out of bounds"
但是,如果我叫:elem_at [1,2,3,4] 5,它是否正確,只有在遍歷整個列表後纔會返回「索引超出範圍」,以便最後一行匹配模式_ _和[] 1?更一般地說,如果名單是大不會是一個性能問題?可以以某種方式優化這種情況嗎?
謝謝!這就說得通了。但是請等待......數學[] _,從[1,2,3,4]和5開始,我必須使用歸納情形4次,對不對? – Frank 2011-05-18 22:46:49
如果n太大,您會遇到elem_at [] _的基本情況。這很好,因爲如果將n與長度進行比較,則最終遍歷列表一次以獲取長度,然後再次查找該元素。 – 2011-05-18 22:47:02
@你說得對。補充問題:Haskell是否在內部存儲列表的長度,以便查詢它可能真的很快? – Frank 2011-05-18 22:49:08