2015-10-17 35 views
0

我卡在其被賦予一個錯誤而當我測試這個功能:哈斯克爾錯誤:沒有實例(民[A0]從使用`it`

maxWeight n wc f = 
let ps (x:xs) = case x of 
    [] -> [[]] 
    otherwise -> ps xs ++ map (x:) (ps xs) 
in maximum $ filter (<wc) $ map sum $ ps $ map f [1..n] 

這是完整的錯誤:

No instance for (Num [[a0]]) arising from a use of `it` 
In a statement of an interactive GHCi command: print it 

我用

maxWeight 5 10 (\i -> i + 1) 

回答

1

稱其爲GHCI測試功能,我發現很難參透你的函數(和輔助ps)是應該做的(這通常有利於得到更好的答案... :-)但它看起來像你混淆了兩個成語在你的ps

定義你可以寫

ps y = case y of 
    [] -> [[]] 
    (x:xs) -> ps xs ++ map (x:) (ps xs) 

或只是

ps [] = [[]] 
ps (x:xs) = ps xs ++ map (x:) (ps xs) 

但目前的情況是,中ps定義缺少基本情況(什麼是ps []?)

有了這個方法,定義編譯,並maxWeight 5 10 (\i -> i + 1)產量9

+0

哦我看到,我已經假定匹配的第一個元素是一個空列表是相同的匹配整個輸入是一個空列表 – user2452478

+0

空list沒有第一個元素,但'[[]]'* does *有一個空列表,因爲它是第一個元素。因此,對於編譯器,您的'ps'在列表列表上工作,因此返回列表列表。當你總結這些時,你會把列表看作是數字,這是(用普通英語)錯誤信息說的。 –