我是一個相對的Haskell新手,我想創建一個元組列表如下公式我命名爲splits
,從單一的列表出現最初,像這樣:創建的元組從列表的變化 - 哈斯克爾
splits [1..4] --> [ ([1],[2,3,4]), ([1,2],[3,4]), ([1,2,3],[4]) ]
或
splits "xyz" --> [ ("x","yz"), ("xy","z") ]
創建可採取1我想通了,我也許應該使用起飛/降功能的元組,然後2,然後3個元素,等的列表,但是這是我到目前爲止,我」 m遇到很多類型聲明錯誤...任何想法?
splits :: (Num a) => [a] -> [([a], [a])]
splits [] = error "shortList"
splits [x]
| length [x] <= 1 = error "shortList"
| otherwise = splits' [x] 1
where splits' [x] n = [(take n [x], drop n [x])] + splits' [x] (n+1)
當你宣佈,第一個參數的類型是一個列表。但是你不需要函數本身的類型,除非你是模式匹配,而只是參數名稱。換句話說,試着用「x」代替「[x]」,我們知道它是一個列表。(「[x]」在這種情況下意味着包含一個元素的列表,x) –
甚至當我嘗試上述時,我得到一個類型錯誤:「無法推論(Num [([a],[a])] )由於使用來自上下文(數字a) 的分割' 的使用而引起的對於 分割:: Num a => [a] - > [([a],[a])] .hs:4:10-39 可能的修正:爲(Num [([a],[a])])添加實例聲明在表達式中:splits'x 1「我不相信我必須定義以這種方式分裂',我也不確定如何。 – user3290526
這個'Could not deduce'錯誤是因爲你試圖把[[把n [x],drop n [x])]'和'splitting'[x](n + 1)'加在一起,沒有任何意義。 –