Haskell取3 a和b形式,如果匹配则返回True,如果不匹配则返回False,haskell

时间:2018-03-05 12:09:11

标签: haskell

这是我已经达到的目标,我无法弄清楚如何在比较它们之前使用take 3获取a和b中的前3个字符。

   checkstring :: String -> String -> Bool
   checkstring a b = if a == b then True
                     else False

2 个答案:

答案 0 :(得分:4)

你可以把它写成:

import Data.Function(on)

checkstring :: Eq a => [a] -> [a] -> Bool
checkstring = on (==) (take 3)

这里我们使用on :: (b -> b -> c) -> (a -> b) -> a -> a -> c函数。此函数接受输入函数b -> b -> c(此处为(==))和函数a -> b(此处为take 3)。

我们生成的函数有两个值(a s)。它将第二个函数应用于这两个值,然后使用两个函数调用的结果调用第一个函数。

所以on定义为:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
on f g x y = f (g x) (g y)

请注意,checkstring函数比仅处理String更通用:只要[a]成立,它就可以处理任何类型的列表Eq a

我建议你将函数重命名为更好地描述它的功能。例如samefirst3

import Data.Function(on)

samefirst3 :: Eq a => [a] -> [a] -> Bool
samefirst3 = on (==) (take 3)

答案 1 :(得分:2)

这比我想象的要容易

checktring :: String -> String -> Bool
checkstring a b = if take 3 a == take 3 b then True
                else False