2017-03-25 40 views
0

我試圖構建高於100變量在範圍 - 列表comprehesion

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

+0

那你想幹什麼? 3元組列表中所有3元組的總和大於100? – phynfo

回答

3

我假設你想在3元組的列表,其中成分的總和大於100的所有3元組,你想以某種方式使用讓我們進入列表理解。

首先:你的表達式的類型是不正確的,這也許應該是:

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權本地到|的右側部分,則不能使用它的左側|。但是,你可以使用let作爲|(謝卡)的右側一個獨立的條款,那麼你可以使用它的|左側像

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

一般來說,在列表解析中,通常使用'let x = e,...'而不是'let x = e in ...',因爲前者使所有其他理解都可以使用'x',而後者只能持續到逗號。當然,在這個特定的情況下,這並不重要,因爲理解在那裏結束。 – chi

+2

@chi這很重要,因爲如果我們不使用'in',我們也可以在'|'的左邊使用'sumT'。所以你的評論是OP的問題的實際答案。 – sepp2k