Haskell采用3种形式a和b,匹配时返回True,不匹配时返回False,Haskell
这就是我所知道的,我不知道如何使用Haskell采用3种形式a和b,匹配时返回True,不匹配时返回False,Haskell,haskell,Haskell,这就是我所知道的,我不知道如何使用take 3在比较a和b之前获取前3个字符 checkstring :: String -> String -> Bool checkstring a b = if a == b then True else False 这比我想象的要容易 checktring :: String -> String -> Bool checkstring a b = if take 3 a ==
take 3
在比较a和b之前获取前3个字符
checkstring :: String -> String -> Bool
checkstring a b = if a == b then True
else False
这比我想象的要容易
checktring :: String -> String -> Bool
checkstring a b = if take 3 a == take 3 b then True
else False
这比我想象的要容易
checktring :: String -> String -> Bool
checkstring a b = if take 3 a == take 3 b then True
else False
你可以这样写:
import Data.Function(on)
checkstring :: Eq a => [a] -> [a] -> Bool
checkstring = on (==) (take 3)
这里我们使用函数。此函数接受一个函数b->b->c
(此处(==)
)和一个函数a->b
(此处接受3
)
然后,我们生成的函数采用两个值(都是a
s)。它将第二个函数应用于这两个值,然后使用两个函数调用的结果调用第一个函数
因此上的定义为:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
on f g x y = f (g x) (g y)
请注意,checkstring
函数比仅处理String
s更通用:只要Eq a
保持不变,它可以处理任何类型的列表[a]
我建议您将函数重命名为更好地描述其功能的名称。例如samefirst3
:
import Data.Function(on)
samefirst3 :: Eq a => [a] -> [a] -> Bool
samefirst3 = on (==) (take 3)
你可以这样写:
import Data.Function(on)
checkstring :: Eq a => [a] -> [a] -> Bool
checkstring = on (==) (take 3)
这里我们使用函数。此函数接受一个函数b->b->c
(此处(==)
)和一个函数a->b
(此处接受3
)
然后,我们生成的函数采用两个值(都是a
s)。它将第二个函数应用于这两个值,然后使用两个函数调用的结果调用第一个函数
因此
上的定义为:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
on f g x y = f (g x) (g y)
请注意,checkstring
函数比仅处理String
s更通用:只要Eq a
保持不变,它可以处理任何类型的列表[a]
我建议您将函数重命名为更好地描述其功能的名称。例如samefirst3
:
import Data.Function(on)
samefirst3 :: Eq a => [a] -> [a] -> Bool
samefirst3 = on (==) (take 3)
或者只是检查字符串a b=take 3 a==take 3 b这里没有理由写如果为真,否则为假
,您可以将其重写为
。或者只是检查字符串a b=take 3 a==take 3 b这里没有理由写如果为真,否则为假
,您可以将其重写为
。