mapbinary :: String -> [Int]
我正在尝试使用此函数将字符串转换为具有1
和0
的列表。
我的想法是我应该将通过isLetter返回true的每个char映射为1,将所有其他char映射为0。
我一直在尝试类似map (isLetter x)
之类的方法,但是我不知道从哪里开始。
答案 0 :(得分:3)
我假设您正在使用Data.Char.isLetter
。在这种情况下,您几乎是正确的,只需使用Bool
Int
转换为fromEnum
mapbinary :: String -> [Int]
mapbinary x = map (fromEnum . isLetter) x -- Point-free-versión = map $ fromEnum . isLetter
答案 1 :(得分:2)
您在正确的轨道上。
map :: (a -> b ) -> [a] -> [b]
isLetter :: Char -> Bool
您可以立即将它们结合起来制成:
map isLetter :: [Char] -> [Bool]
map isLetter :: String -> [Bool] -- equivalently
这与您要查找的内容非常接近,唯一的不同是它返回True
和False
,而不是分别返回1
和0
。因此,您还需要为此做些事情。
我们可以定义执行此操作的函数boolToInt
:
boolToInt :: Bool -> Int
boolToInt False = 0
boolToInt True = 1
但是,在这种情况下,前奏函数fromEnum
会执行相同的操作。
map fromEnum . map isLetter :: String -> [Int]
或者,等效地:
map (fromEnum.isLetter) :: String -> [Int]