我看到了这个功能
last_element :: [a] -> a
last_element (_:xs)= last_element xs
我不理解“(_:xs)”中的下划线冒号。我读到它从输入的列表中分离出头部。下划线冒号是以原始递归方式删除列表的第一个数字或“头部”吗?
编辑,根据我的理解,这个功能缺少基本情况。这是对的吗?
答案 0 :(得分:1)
下划线允许您进行模式匹配,但暗示您实际上不会使用该值。您的模式匹配并非详尽无遗,因此无法实际工作。您需要定义缺失的模式来修复它:
last_element :: [a] -> a
last_element [] = error "Empty List"
last_element [x] = x
last_element (_:xs)= last_element xs