첫 번째 질문의 내부에 길이에서 하스켈에 멍청한 놈 발생에 대한 어떤 인스턴스는, 그래서 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이'입니다 강조하고 싶은 부분 솔루션 (또는 비슷한 I 희망)에 온 예문 용 문자열 E : "AABA"-> [3313] (3가 3 번 repeates 상기 문자에서 유래) "aaccva"-> 내가 람다와 기능을 만들려고 나중에 [332213]
및 이 결과지도는 :
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
및 I'am 붙어, 내가 가진 무슨 일이 일어나고 있는지 이해할 수 없었습니다 ...이 기능을 수정하는 데 필요한 것은 무엇입니까? 초보자로서
rpt chr list = map (\chr -> length $ filter (== chr) list) list
, 내가 FlexibleContexts
의 GHCi의 제안을 무시합니다 :
이것은 초보자들에게 구조상 꽤 좋다. 당신은이 말을 잘 알고있다. – luqui
이런 상황에서 일반적인 조언으로서, 혼동스러운 오류 메시지가 나타나면 유형 주석이 무엇인지 생각해 보라는 말을 추가하기 시작한다. . 이렇게하면 오류 메시지가 크게 향상됩니다. 실제로 모든 최상위 함수에 대해 가능한 한 빨리 이러한 종류의 실수를 catch하기 위해 형식 주석을 제공하는 것이 좋습니다. –
이것은 초보자에게 좋습니다. 몇 가지주의 사항 : 1) 'clean string = total <= gr where ...'을 고려하십시오. 경비원을 사용하거나 true/false를 반환하기 위해 if-then-else가 필요 이상으로 복잡해 보이기 때문에 2) 정확하지만 차선책 : 많은 후보자를 생성하고 나중에 필터링해야합니다. 이것을 고려해보십시오 : 여러분은'x'를 건너 뛰거나'xs '에서 모든 k 요소를 취하거나'x'를 선택하여 (그리고 나서'xs'에서 k-1 개 요소 만 취함으로써)'x : xs'에서 k 개 요소를 선택할 수 있습니다. . – chi