- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
于是我发现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/
vector 上的大多数操作由于其 trie,实际上是常数表示。但是,我无法弄清楚 splitAt 的性能配置文件是什么执行。 它在库中定义为: override /*IterableLike*/ d
splitAt函数可以实现如下(https://wiki.haskell.org/Lazy_pattern_match): import Prelude hiding (splitAt) splitA
我想在 Haskell 中每 3 个字母拆分一个字符串。 我曾尝试使用 splitAt,但我必须重复此操作,直到字符串每 3 个字母被拆分一次。 有办法吗? 例如 "WEAREDISCOVERED"
于是我发现Haskell中内置的splitAt函数可以这样定义: splitAt :: Int -> [a] -> ([a], [a]) -- Pre: n >= 0 splitAt n []
我是一名优秀的程序员,十分优秀!