gpt4 book ai didi

haskell - 理解 Haskell 中的 splitAt 有问题吗?

转载 作者:行者123 更新时间:2023-12-05 01:46:45 25 4
gpt4 key购买 nike

于是我发现Haskell中内置的splitAt函数可以这样定义:

splitAt :: Int -> [a] -> ([a], [a])
-- Pre: n >= 0
splitAt n []
= ([], [])
splitAt n (x : xs)
= if n == 0
then ([], x : xs)
else (x : xs', xs'')
where
(xs', xs'') = splitAt (n - 1) xs

我在这里不明白/无法理解的是 where 部分。

举个例子,

splitAt 2 "Haskell" 应该返回 (["Ha"],["skell"]),但我真的不明白它在这里是如何工作的将 (x:xs',xs'') 定义为另一个函数?这在视觉上看起来如何?

例子:

splitAt 2 "Haskell"
= (('H':xs',xs''))

^ 所以这会执行 splitAt 1 "askell",但我很困惑上面元组中的 xs',xs'' 会发生什么...

谢谢。

最佳答案

(xs', xs'') = splitAt (n - 1) xs

这采用 splitAt (n - 1) xs 的结果,这是一对,并将名称 xs' 分配给该对的第一个元素(即xs 的第一个 n - 1 个元素)和 xs'' 到第二个元素(即剩余元素)。

(x:xs', xs'')

这会产生一对。该对的第一个元素是一个列表,它是将 x 添加到 xs' 之前的结果(即 n-1 的第一个元素 xs)。第二个元素是 xs''(即 xs 的剩余元素)。

关于haskell - 理解 Haskell 中的 splitAt 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com