3

在 Haskell 中,如何在不使用前奏函数长度或 (!!) 的情况下提取列表的第七个元素。

以下是我到目前为止所拥有的:

element7 :: [a] -> Int -> a
element7 [] _     = error "list too short"
element7 (_:xs) 7 = element7 xs (k - 1)
4

4 回答 4

7
seventh (one:two:three:four:five:six:seven:rest) = seven
于 2013-06-10T03:49:16.707 回答
4

好吧,让我们从我们所拥有的开始

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
于 2013-06-10T03:25:36.047 回答
1

这是另一个版本,它删除给定字符串的前六个字母,然后返回其余部分的第一个字母:

seventh = head . drop 6
于 2013-06-10T04:13:27.223 回答
0

此解决方案尝试更接近您的尝试:

element :: [a] -> Int -> a
element []     _ = error "list too short"
element (x:_)  1 = x
element (_:xs) i = element xs (k - 1)
于 2013-06-10T05:38:06.117 回答