1
私はハスケルの初心者です。ハスケルでcryptopalsの暗号のチャレンジをしようとしています。たぶん値を確認する
私は、次のコードを書いた:
import Data.Char
nibbleToInt :: Char -> Int
nibbleToInt c
| ('0' <= c && c <= '9') = (ord c) - 48
| ('a' <= c && c <= 'f') = (ord c) - 87
| ('A' <= c && c <= 'F') = (ord c) - 55
| otherwise = error "Boom"
hexToInt :: String -> Int
hexToInt (x:y:[]) = nibbleToInt x * 16 + nibbleToInt y
hexToInt _ = error "Boom"
hexToInts :: String -> [Int]
hexToInts [] = []
hexToInts (n1:n2:ns) = [hexToInt $ [n1] ++ [n2]] ++ (hexToInts ns)
hexToInts _ = error "Boom"
main = do
print $ hexToInts "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
このコードが動作しているようですが、私はそれを向上させることができると確信しています!
は、私が使用するnibbleToInt
機能をリファクタリング
Maybe
:
nibbleToInt :: Char -> Maybe Int
nibbleToInt c
| ('0' <= c && c <= '9') = Just ((ord c) - 48)
| ('a' <= c && c <= 'f') = Just ((ord c) - 87)
| ('A' <= c && c <= 'F') = Just ((ord c) - 55)
| otherwise = Nothing
しかし、その後、私はそれがMaybe Int
を返す、二回nibbleToInt
関数を呼び出すように、関数HEXTOINTを書き換える方法がわかりません。私はそれらの2つの値をテストする方法を知らない。私は私の周りに任意のHaskellのプログラマを知らないよう
すべてのヘルプは、大歓迎です...
必要なものは次のとおりです。 Hoogleの 'liftA2'または' <*> 'と' <$> 'を検索してください。 – Jubobs
お返事ありがとうございました! – ols