Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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对查找调用的返回值进行操作_Haskell - Fatal编程技术网

Haskell对查找调用的返回值进行操作

Haskell对查找调用的返回值进行操作,haskell,Haskell,我有以下代码(使用Haskell前奏曲中的查找): 问题是我试图对编译器不允许的可能Int和Int执行加法。如何解决此问题?如果先决条件是查找始终成功,请使用fromJust::也许a->a解析值-例如,fromJust(lookup c al) 否则,如果查找失败,您将需要返回一些“默认”值(例如0)。然后,您可以使用fromMaybe::a->Maybe a->a,它将默认值作为第一个参数并解析该值-例如,fromMaybe 0(lookup c a1)如果前提是查找始终成功,则使用from

我有以下代码(使用Haskell前奏曲中的查找):


问题是我试图对编译器不允许的
可能Int
Int
执行加法。如何解决此问题?

如果先决条件是查找始终成功,请使用
fromJust::也许a->a
解析值-例如,
fromJust(lookup c al)


否则,如果查找失败,您将需要返回一些“默认”值(例如
0
)。然后,您可以使用
fromMaybe::a->Maybe a->a
,它将默认值作为第一个参数并解析该值-例如,
fromMaybe 0(lookup c a1)
如果前提是查找始终成功,则使用
fromJust::Maybe a->a
解析该值-例如,
fromJust(查找c al)


否则,如果查找失败,您将需要返回一些“默认”值(例如
0
)。然后,您可以使用
fromaybe::a->Maybe a->a
,它将默认值作为第一个参数并解析该值-例如,在这种情况下,
fromaybe 0(查找c1)
,,因为您将值添加在一起,并且很自然地忽略
任何值(即将它们视为
0
),您还可以使用
mappaye
编写函数:

import Data.Maybe (mapMaybe)

al :: [(Char, Int)]
al = [('A', 1), ('B', 2), ('C', 3)]

strToInt :: String -> Int
strToInt = sum . mapMaybe (`lookup` al)
GHCi:


在这种情况下,由于您将值添加到一起,并且忽略
任何值(即将它们视为
0
)是很自然的,因此您也可以使用
mappaye
编写函数:

import Data.Maybe (mapMaybe)

al :: [(Char, Int)]
al = [('A', 1), ('B', 2), ('C', 3)]

strToInt :: String -> Int
strToInt = sum . mapMaybe (`lookup` al)
GHCi:


我想你必须控制自己的逻辑。当您提供的字符返回
Nothing
时,不知道您想要什么,此函数最好返回
类型

如果您想将
Nothing
s视为
0
,那么
mappaye
就是一种方法。或者,如果您想要
可能
键入结果,则

al :: [(Char, Int)]
al = [('A', 1), ('B', 2), ('C', 3), ('D', 4)]

strToInt :: [(Char, Int)] -> String -> Maybe Int
strToInt ts cs = foldr (\c m -> (+) <$> (lookup c ts) <*> m) (Just 0) cs

*Main> strToInt al "AJN"
Nothing
*Main> strToInt al "ABCD"
Just 10
al::[(字符,Int)]
al=[('A',1),('B',2),('C',3),('D',4)]
stroint::[(字符,Int)]->字符串->可能是Int
stroint ts cs=foldr(\c m->(+)(查找c ts)m)(仅0)cs
*Main>strToInt al“AJN”
没有什么
*Main>stroint al“ABCD”
只有10个

我想你必须控制自己的逻辑。当您提供的字符返回
Nothing
时,不知道您想要什么,此函数最好返回
类型

如果您想将
Nothing
s视为
0
,那么
mappaye
就是一种方法。或者,如果您想要
可能
键入结果,则

al :: [(Char, Int)]
al = [('A', 1), ('B', 2), ('C', 3), ('D', 4)]

strToInt :: [(Char, Int)] -> String -> Maybe Int
strToInt ts cs = foldr (\c m -> (+) <$> (lookup c ts) <*> m) (Just 0) cs

*Main> strToInt al "AJN"
Nothing
*Main> strToInt al "ABCD"
Just 10
al::[(字符,Int)]
al=[('A',1),('B',2),('C',3),('D',4)]
stroint::[(字符,Int)]->字符串->可能是Int
stroint ts cs=foldr(\c m->(+)(查找c ts)m)(仅0)cs
*Main>strToInt al“AJN”
没有什么
*Main>stroint al“ABCD”
只有10个

如果字符串包含在
a1
中未出现的字符,您认为会发生什么?如果字符串包含在
a1
中未出现的字符,您认为会发生什么?这并不是仅有的两种可能性:它们可能希望通过
传播
无任何内容
(+)查找c1 stroint cs
。这并不是唯一的两种可能性:它们可能希望通过
(+)查找c1 stroint cs
传播
无内容。