变量不在范围内 - 列表补偿

时间:2017-03-25 19:23:15

标签: 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:我需要用户let并列出comprehesion

1 个答案:

答案 0 :(得分:3)

我假设您想要在3元组列表中获取所有3元组,其中组件的总和大于100,并且您希望以某种方式在listcomprehension中使用let。

首先:表达式的类型不正确,应该是:

resultSum :: [(Integer,Integer,Integer)] -> [Integer]

尝试以下解决方案:

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

BTW:let in的{​​{1}}权限位于|右侧的本地,您无法在|左侧使用它。但是,您可以在|(谢谢)的右侧使用let作为独立条款,然后您可以在|的左侧使用它,如

|