在 Haskell 中,如何在不使用前奏函数长度或 (!!) 的情况下提取列表的第七个元素。
以下是我到目前为止所拥有的:
element7 :: [a] -> Int -> a
element7 [] _ = error "list too short"
element7 (_:xs) 7 = element7 xs (k - 1)
在 Haskell 中,如何在不使用前奏函数长度或 (!!) 的情况下提取列表的第七个元素。
以下是我到目前为止所拥有的:
element7 :: [a] -> Int -> a
element7 [] _ = error "list too short"
element7 (_:xs) 7 = element7 xs (k - 1)
seventh (one:two:three:four:five:six:seven:rest) = seven
好吧,让我们从我们所拥有的开始
element :: [a] -> Int -> a
element [] _ = error "list too short"
element (_:xs) 7 = element7 xs (k - 1)
现在最后一种情况是当我们在 7 时,但我们真的对任何大于 0 的数字感兴趣
element (x:xs) n | n > 0 = element xs (n-1)
然后如果n
是 1,我们只返回头部
element (x:xs) n | n > 0 = element xs (n-1)
| n == 0= x
| otherwise = error "Index out of range"
现在我们只需要创建一个很好的快捷方式来查找第 7 个元素:
seventh xs = element xs 6
这是另一个版本,它删除给定字符串的前六个字母,然后返回其余部分的第一个字母:
seventh = head . drop 6
此解决方案尝试更接近您的尝试:
element :: [a] -> Int -> a
element [] _ = error "list too short"
element (x:_) 1 = x
element (_:xs) i = element xs (k - 1)