하스켈을 배우고 있으며, problem 30 on project Euler을 해결하고 있습니다.정수를 숫자 목록으로 분리하십시오.
digits n = if n<10 then [n] else (digits (quot n 10)) ++ [(mod n 10)]
isP30 n = (sum $ map (^5) $ digits n) == n
sum $ filter isP30 [10^5..10^6-1]
digits
기능을 구현하는 데 더 읽기 쉬운 방법이 있습니까?
digits n = fmap digitToInt $ show n
난 당신이 @의 bheklilr의 대답처럼, Data.Char
처음부터 digitToInt
를 가져올 필요가 있다고 언급하는 것을 잊었다 :에 대해 무엇
[unfold] (http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List.html#v:unfoldr)를 사용하는 것은 어떻습니까? –
@ BenjaminHodgson, 정교하게 주시겠습니까? –
'unfoldr'는 모든 단계에서 목록 요소를 생성하는 루프를 일반화합니다. 현재 루프 "state"가 주어지면 목록 값 (Nothing) 생성을 멈추거나 값 ('x')을 생성할지 여부를 결정하고 새 상태 ('s 예를 들어, 'unfoldr (\ n -> n == 10이면 Nothing else (n, n + 1)) 0'은'[0..9 ]'. 당신은 숫자를 거꾸로 생성하고 마지막에'역순으로'할 수 있습니다. – chi