Haskell 变量不在范围内-列表压缩

Haskell 变量不在范围内-列表压缩,haskell,list-comprehension,Haskell,List Comprehension,我正在尝试构造一个函数,该函数在大于100时返回一个元组元素和的列表 resultSum :: [(Integer)] -> [Integer] resultSum (x:xs) = [ sumT | let sumT = fst x + snd x in sumT + trd x, sumT > 100 ] trd (_,_,x) = x 我收到消息: 不在范围内:`sumT' 我想,当我使用let时,我是在指定谁是我的变量 PS:我需要使用userlet和list compr

我正在尝试构造一个函数,该函数在大于100时返回一个元组元素和的列表

resultSum :: [(Integer)] -> [Integer]
resultSum (x:xs) = [ sumT | let sumT = fst x + snd x in sumT + trd x, sumT > 100 ]

trd (_,_,x) = x
我收到消息:

不在范围内:`sumT'

我想,当我使用
let
时,我是在指定谁是我的变量


PS:我需要使用user
let
和list compression

我假设您希望在一个包含3个元组的列表中获得所有3个元组,其中组件的总和大于100,并且您希望在列表中以某种方式使用let

首先:您的表达式类型不正确,可能是:

resultSum :: [(Integer,Integer,Integer)] -> [Integer]
请尝试以下解决方案:

resultsum xs3 = [x+y+z | (x,y,z) <- xs3, let sumT=x+y+z in sumT>100]

我假设你想得到一个3元组列表中的所有3元组,其中组件的总和大于100,你想在列表中使用let

首先:您的表达式类型不正确,可能是:

resultSum :: [(Integer,Integer,Integer)] -> [Integer]
请尝试以下解决方案:

resultsum xs3 = [x+y+z | (x,y,z) <- xs3, let sumT=x+y+z in sumT>100]

你想做什么?总和大于100的三元组列表中的所有三元组?您想做什么?三元组列表中的所有三元组的总和大于100?通常,在列表理解中,通常使用
let x=e,…
而不是
let x=e in…
,因为前者使
x
可用于理解的所有其余部分,而后者仅持续到逗号。当然,在这个特定的例子中,这并不重要,因为理解就到此为止。@chi这很重要,因为如果我们不在
中使用
,我们也可以在
的左侧使用
sumT
。因此,你的评论就是OP问题的实际答案。一般来说,在列表理解中,通常使用
let x=e,…
而不是
let x=e In…
来代替
。当然,在这个特定的例子中,这并不重要,因为理解就到此为止。@chi这很重要,因为如果我们不在
中使用
,我们也可以在
的左侧使用
sumT
。所以你的评论就是OP问题的真实答案。