【发布时间】:2020-10-25 20:03:43
【问题描述】:
我对haskell 很陌生,我正在尝试过滤第一个元素大于第二个元素的所有元组。我不明白为什么这不起作用,有什么帮助吗?
main =
do
let xs = [2, 3, 2]
let ys = [1, 2, 3]
let cs = zip xs ys
filter ((>snd).fst) cs
【问题讨论】:
-
"第一个元素大于第二个" — 你缺少比较函数
(>)。 -
请不要使用
do块。列表是Monad的一个实例,但main的类型为IO a,所以是另一个monad。 -
@LewisClark:这是行不通的,因为
.fst将提取元组的第一个元素,然后您打算将其与函数snd进行比较。但函数不是Ord的实例,数字2也不是函数。 -
@LEwisClarck:确实如此。在这种情况下,它是
let ... in,所以是let xs = [2,3,2] in let ys = [1,2,3] in zip xs ys。这是在do块之外。 -
请用完整的代码和错误信息发布正确的问题。
标签: haskell