list - Haskell 中的 span 函数

标签 list haskell

我认为span函数Haskell是将谓词应用于列表,并返回一个元组,其中第一个元素是列表中满足该条件的元素谓词,第二个元素是列表的提醒。

当我输入以下内容时效果很好: span (<3) [1,2,4,5,6] 。它只是在 GHCI 中返回: ([1,2], [4,5,6]) .

但是,当我输入span (>3) [1,2,4,5,6]时,它返回 ([],[1,2,4,5,6]) 。但我认为它应该返回 ([4,5,6],[1,2]) 。所以我想知道其中的原因。

最佳答案

您对span的理解不完全正确,官方文档是这样说的:

span, applied to a predicate p and a list xs, returns a tuple where first element is longest prefix (possibly empty) of xs of elements that satisfy p and second element is the remainder of the list

(强调我的)。

因此,谓词从头开始应用于列表的每个元素。这意味着谓词

span (<3) [1,2,4,5,6]

满足前两个元素,结果为

([1,2], [4,5,6])

但在另一个例子中

span (>3) [1,2,4,5,6]

列表的第一个元素已经不满足谓词,因此返回的元组的第一个元素将是一个空列表。

关于list - Haskell 中的 span 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59343416/

相关文章:

c++ std::copy 类型转换为派生类可能吗?

java - 为什么我在 java 中的 JComboBox 的 ListCellRenderer 上出现类转换异常?

haskell - `where` block 中的全局 CAF - Haskell

haskell - 索引仿函数的总和

Haskell:更好地理解代数数据类型

haskell - 将函数解释为具有多种类型

包含列表索引值列表的Java排序列表?

c# - 在类方法中使用通用列表的字段

python - 在循环的条件语句中调用 len() 可以吗?

测试列表是否具有重复(重复)元素的 Haskell 函数