我試圖函數的元組應用到值應用功能的元組的元組
λ> let foo = ((+1), (*3), ((:)5)) #Each function has type: a -> a
λ> let bar = (1, 5, [0]) #Each value of the corresponding tuple has type a
的元組如何實現:
toImplement foo bar = ?
這樣的:
λ> toImplement foo bar
-> (2, 15, [0,5]) # using foo and bar above
對於任何有效的foo和bar(長度相同),你如何實現這一點?
[我看着this problem,但它是爲一個固定類型實現的。我需要一個通用的實現]
動機:
我試圖有效地編寫倍。
let acc1 = \x acc -> x*x:acc
let acc2 = (+)
foldr (\x acc -> (acc1 x (fst acc), acc2 x (snd acc))) ([],0) [1..10]
> ([1,4,9,16,25,36,49,64,81,100],55)
我有2個不同的蓄電池ACC1 & ACC2這個循環在列表中只出現一次。我想這樣做的任意數量的累加器都有類型a - > b [其中a是列表中元素的類型,b是累加器的輸出類型] 它看起來笨拙,必須使用fst和snd訪問元組:/
「你怎麼能實現這個一般對於任何有效的foo和bar(長度相同的)?」 ---你不能使它成爲通用的元組。 – zerkms 2015-03-30 20:11:57
你不能寫一個可以處理任意大小的元組的'toImplement'。當然,使用高級語言功能和一系列擴展可能會有一些非常糟糕的方法,但它可能比爲了得到'toImplement','toImplement3'複製/粘貼基本相同的定義更加麻煩'... toImplementN'。 – bheklilr 2015-03-30 20:12:54
爲什麼Haskell不允許使用任意元組? – GeneralBecos 2015-03-30 20:32:06