第一個問題,這裏面完全在Haskell這樣的小白,所以請與我是那種:)沒有實例可摺疊從長度引起的拉姆達
我與this哈斯克爾的問題,6號打練習
並最終來到了溶液(或類似的東西,我希望)與此代碼
combinations gr lis = filter clean $ sequence $ replicate gr lis
where
clean string
| total > gr = False
| otherwise = True
where total = sum [ rpt c string | c <- string]
rpt chr list = length $ filter (== chr) list
我喜歡突出的功能是「RPT」,其對一個字符重複的次數部分一個字符串,例如E: 「AABA」 - > [3313](3來自字母a,其中repeates 3次) 「aaccva」 - > [332213]
稍後我試圖使該函數與一個lambda和造成這種地圖:
rpt chr list = map (\chr -> length $ filter (== chr)) list
,並在第一ghci中告訴我使用FlexibleContext允許這一點,但如果我那麼做它產生:
<interactive>:7:1:
No instance for (Foldable ((->) [Char]))
arising from a use of ‘rpt’
In the expression: rpt 'a' string
In an equation for ‘it’: it = rpt 'a' string
,在這裏我'卡住了,我有無法理解正在發生的事情......修復此功能需要什麼?
對於初學者來說,這是非常好的結果,你說你是這樣的,你對此有一個訣竅 – luqui
作爲這些情況下的一般建議,當你得到一個令人困惑的錯誤信息時,開始添加類型註釋,說明你認爲類型應該是什麼。這將顯着改善錯誤信息。實際上,爲所有頂級函數提供類型註釋通常是很好的做法,以儘快捕獲這些類型的錯誤。 –
這對初學者很好。一些注意事項:1)考慮'clean string = total <= gr where ...'因爲使用守衛或if-then-else返回true/false看起來比它需要的更復雜2)你的組合算法正確但並不理想:您會生成很多候選人,並且您需要稍後進行篩選。考慮一下:你可以通過跳過'x'(並且從'xs'中取所有k個元素)或者選擇'x'(然後從'xs'中只取k-1個元素)從'x: 。 – chi