Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
Function Haskell Fold实现`elemIndex`_Function_Haskell_Fold - Fatal编程技术网

Function Haskell Fold实现`elemIndex`

Function Haskell Fold实现`elemIndex`,function,haskell,fold,Function,Haskell,Fold,我正在研究HaskellelemIndex函数: elemIndex :: Eq a => a -> [a] -> Maybe Int 在这个定义中,可能是什么意思?有时当我调用它时,输出有一个Just或一个Nothing这是什么意思?如果我使用折叠,我如何解释这一点?第一个问题: 这是什么意思 这意味着返回的值是索引(Int)或无 从: elemIndex函数返回给定列表中与查询元素相等(按==)的第一个元素的索引,如果没有这样的元素,则返回Nothing 第二个问题: 如

我正在研究Haskell
elemIndex
函数:

elemIndex :: Eq a => a -> [a] -> Maybe Int
在这个定义中,
可能是什么意思?有时当我调用它时,输出有一个
Just
或一个
Nothing
这是什么意思?如果我使用折叠,我如何解释这一点?

第一个问题:

这是什么意思

这意味着返回的值是索引(Int)或无

从:

elemIndex函数返回给定列表中与查询元素相等(按==)的第一个元素的索引,如果没有这样的元素,则返回Nothing

第二个问题:

如果我使用折叠,我如何解释这一点

我不确定是否有足够的上下文来解释“使用折叠”部分。但是,至少有两种方法可以使用此功能:

elemIndex :: Eq a => a -> [a] -> Maybe Int
  • 案例分析,您是否陈述了在每个案例中要返回的内容:
  • case elemIndex xs of
    只需x->fx——将函数f应用于x。
    Nothing->undefined--在此处执行某些操作,例如,给出一个默认值。
    
  • 使用功能:
  • 可能是默认值f(elemIndex xs)
    
    可能是一种求和类型。
    总和类型是具有多个可能表示形式的任何类型。
    例如:

    数据Bool=False | True

    Bool
    可以表示为
    True
    False
    。也许也是如此

    数据可能a=没有|只是a

    Maybe类型封装了一个可选值
    类型A的值可能包含类型A的值(仅表示为A),也可能为空(表示为无)

    elemIndex::Eq a=>a->[a]->Maybe Int

    elemIndex函数返回给定列表中与查询元素相等(by==)的第一个元素的索引,如果没有这样的元素,则返回Nothing

    让我们将其与
    indexOf
    函数进行比较
    此方法的可能值是什么

  • 数组中元素的索引(假设为2)
  • -1以防未找到
  • 另一种表示方式:

  • 如果找到,则返回一个数字-
    仅2

  • 我们可以返回一个表示值的值,而不是返回像-1这样的幻数 故障选项-

  • 关于“如果我使用折叠,我如何解释这个问题”,我没有足够的信息来理解这个问题。

    可能是一个类型构造函数

    Int
    是一种类型
    可能Int
    是一种类型

    String
    是一种类型<代码>可能字符串
    是一种类型

    对于任何类型的
    a
    可能a
    是一种类型。它的值有两种类型:
    Nothing
    Just x
    ,其中
    x
    a
    类型的值(我们写:
    x::a
    ):

    在第一条规则中,值的类型
    x::a
    和值的类型
    Just x::Maybe a
    中的
    a
    是相同的。因此,如果我们知道
    x
    的类型,我们只知道
    的类型x
    ;反之亦然

    在第二条规则中,值
    nothing
    本身中的任何内容都不能确定
    a
    的类型。将根据该值的使用方式(即从其使用上下文、从其调用站点)进行确定

    至于
    elemIndex
    的折叠实现,可以是例如

    elemIndex_asFold :: Eq a => a -> [a] -> Maybe Int
    elemIndex_asFold x0 = foldr g Nothing 
        where
        g x r | x == x0 = Just x
              | else    = r
    

    你查过电话号码了吗?如果元素出现在列表中,你会得到一个
    值(保存它第一次出现的索引),如果它没有出现,你会得到
    值。或者如果你的评论是基于对
    不熟悉,或者根本不熟悉
    ,请参阅-或者网上无数其他好的解释中的任何一个。。我想知道如何使用fold实现这一点,但我甚至不知道如何尝试,因为我不知道如何处理边缘情况,因为存在
    可能