作为初学者练习,我已经实现了以下功能找到的第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