ilk soru içindeki uzunluğu gelen Haskell üzerinde bir noob doğan hiçbir örneği, bu yüzden this Haskell sorusu 6 numaralı oynuyordumKatlanabilir burada ve tamamen lambda
:) benimle tür
egzersizleri lütfen ve sonunda bu kodu
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
i karakter tekrarlanır sayısını sayar fonksiyonu 'rpt' olduğu vurgulanır ister parçası ile çözelti (veya benzer bir şey umarım) geldi exampl için bir dize e: "aaba" -> [3313] (3 3 kez repeates mektubunda, gelir) "aaccva" -> Bir lambda fonksiyonu yapmaya çalıştı daha sonra [332213]
ve Bu sonuçlanan bir harita:
rpt chr list = map (\chr -> length $ filter (== chr)) list
ve birinci GHCi de
buna izin vermek FlexibleContext kullanmak söyledi fakat ben o zaman eğer o verir: burada<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
ve bi'şey sıkışmış, var Neler olduğunu anlayamadım ... bu işlevi düzeltmek için ne gerekiyor? Bir acemi olarak
rpt chr list = map (\chr -> length $ filter (== chr) list) list
, ben FlexibleContexts
ait GHCi önerisini görmezden olacaktır:
Bu, başlangıç seviyeniz için yapısal olarak oldukça iyidir, bunun için bir çakmağınız var. – luqui
Bu durumlarda, genel bir tavsiye olarak, kafa karıştırıcı bir hata mesajı aldığınızda, türlerin ne olması gerektiğini düşündüğünüzüzü belirten tür ek açıklamaları eklemeye başlayın. . Bu, * önemli iletileri * iyileştirecektir. Aslında, bu tür hataları mümkün olan en kısa sürede yakalamak için tüm üst düzey işlevler için tür açıklamaları sağlamak genellikle iyi bir uygulamadır. –
Bu yeni başlayanlar için iyidir. Bir çift not: 1) 'temiz dizgiyi = toplam <= gr nerede ...' koruyucular kullanacağından ya da eğer geri dönecek olursanız true/false daha karmaşık görünüyorsa 2) kombinasyonlar için algoritmanız görünüyor doğru ama yetersiz: çok sayıda aday oluşturursunuz ve daha sonra bunları filtrelemeniz gerekir. Bunu göz önünde bulundurun: 'x:' den x'leri atlayarak (ve x'lerden tüm k öğelerini alarak) veya x'i seçerek (ve daha sonra xs'den yalnızca k-1 öğelerini alarak) k öğelerini x: xs'den seçebilirsiniz. . – chi