Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell采用3种形式a和b,匹配时返回True,不匹配时返回False,Haskell_Haskell - Fatal编程技术网

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这里没有理由写
如果为真,否则为假
,您可以将其重写为