2014-03-30 4 views
0

IBAN을 만들고 싶지만 첫 번째 단계는 BBAN을 만듭니다. 선행 0이 숫자에 추가됩니다. 여기 코드는 다음과 같습니다문자열에 IBAN char 유형 변경

iban :: [Char] -> [Char] -> [Char] -> [Char] 
iban a b c | ((length a == 4) && (length b <= 6) && (length c <= 10)) = createBBAN a b c 
      | otherwise = "Error" 

createBBAN x y z | ((length y) < 6) = createBBAN x ("0" ++ y) z 
       | ((length z) < 10) = createBBAN x y ("0" ++ z) 
       | otherwise   = x ++ y ++ z 

하지만이 같은 IBAN을 가지고 싶다 :

iban :: Integer -> Integer -> Integer -> String 

내가 어떻게 할 수 있습니까?

답변

1
iban :: Integer -> Integer -> Integer -> String 
iban a b c | and [(length $ show a) == 4, 
        (length $ show b) == 6, 
        (length $ show c) <= 10] = createBBAN a b c 
      | otherwise = "Error" 

createBBAN x y z | ((length y) < 6) = createBBAN x ("0" ++ y) z 
       | ((length z) < 10) = createBBAN x y ("0" ++ z) 
       | otherwise   = x ++ y ++ z 

을 표시하고 길이를 얻을. 또한 로그베이스 10을 호출하여 자릿수를 추출 할 수도 있습니다.

브레인이 컴파일되었으므로 잘하면 좋습니다.

2

음 .. 나는 오래 동안 haskell을하지 않았다. 그러나 약

iban :: Integer -> Integer -> Integer -> String 
iban a b c | ((a < 10000) && (a>8999) && (b < 1000000) && (c < 10000000000)) = createBBAN (show a) (show b) (show c) 
      | otherwise = "Error" 

createBBAN x y z | ((length y) < 6) = createBBAN x ("0" ++ y) z 
       | ((length z) < 10) = createBBAN x y ("0" ++ z) 
       | otherwise   = x ++ y ++ z 

나중에 createBBAN에서 쇼를 적용 할 수 물론이다하지만 난 당신이 여러 번 변환해야하기 때문에 그 훨씬 이해가되지 것이라고 생각합니다.
=>는

를 통해 문자열로 정수를 표현 문자열에 형태 캐스트

관련 문제