使用foldr查找列表的第K个元素

大卫

我尝试通过列表中的索引实现自己的安全搜索元素。我认为我的函数必须具有以下签名:

safe_search :: [a] -> Int -> Maybe a
safe_search xs n = foldr iteration init_val xs n
iteration = undefined
init_val = undefined

我对迭代的实现有疑问。我认为它必须看起来像这样:

safe_search :: [a] -> Int -> Maybe a
safe_search xs n = foldr iteration init_val xs n
    where
    iteration :: a -> (Int -> [a]) -> Int -> a
    iteration x g 0 = []
    iteration x g n = x (n - 1)
    init_val :: Int -> a
    init_val = const 0

但这有很多错误。我对haskell的直觉是错误的。

内斯

你有

safe_search :: [a] -> Int -> Maybe a
safe_search xs n = foldr iteration init_val xs n

如果null xs成立,foldr iteration init_val []=> init_val,那么

init_val n

必须说得通。一无所有,所以

             = Nothing

这是我们在这里所能做的,以适合返回类型。

所以init_val是一个函数,:: Int -> Maybe a根据的定义foldr,这也是组合函数的“递归”参数“从右边来”:

iteration x r 

但是,此调用也必须(再次,通过定义只返回这样的功能本身foldrfoldr f z [a,b,c,...,n] == f a (f b (f c (...(f n z)...)))f :: a -> b -> b即它必须返回相同类型的值,因为它在它的第二个参数所得到的),所以

               n | n==0 = Just x

这是容易的,第0个元素是一个在手,x; 如果n > 0呢?

                 | n>0  = ... (n-1)

正确的?只剩下一步,您可以自己做... :)x列表中的点不是(列表的元素);而是列表中的点。它必须是一个函数。作为参数,我们已经收到了这样的功能...

要查看此处发生的情况,最好检查一下输入是单元素列表的情况,首先,

safe_search [x] n = foldr iteration init_val [x] n
                  = iteration x init_val n

有两个要素,

            [x1, x2] n = iteration x1 (iteration x2 init_val) n
        --               iteration x  r                       n

希望现在清楚了。

编辑:因此,这类似于通常的foldr基于实现的zip融合与n向下的递减枚举,的确编码了

foo xs n = ($ zip xs [n,n-1..]) $ 
                        dropWhile ((>0) . snd) >>>
                        map fst >>>
                        take 1 >>> listToMaybe
         = drop n >>> take 1 >>> listToMaybe $ xs

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Prolog在列表中查找第K个元素

来自分类Dev

查找单链列表的第k个元素

来自分类Dev

查找单链列表的第k个元素

来自分类Dev

使用递归在Python列表中查找第K个最大元素

来自分类Dev

查找单链列表的第K个到最后一个元素

来自分类Dev

Haskell中列表的第K个元素

来自分类Dev

Java:使用2个数组查找数组的第K个最大元素

来自分类Dev

在扩展字符串中查找第k个元素

来自分类Dev

在数组MIPS中查找第K个不同的元素

来自分类Dev

最大堆查找第 k 个最小元素

来自分类Dev

如何在Haskell中使用递归函数查找列表的第n个元素?和更多

来自分类Dev

Racket,编写查找列表中第 n 个元素的函数

来自分类Dev

使用Selenium Webdriver按类查找第n个元素

来自分类Dev

使用分区的数组中第K个最小元素

来自分类Dev

列表的第n个元素

来自分类Dev

如何在不对列表进行排序的情况下找到列表的第k个最小元素?

来自分类Dev

如何使用 foldl 删除列表的第 n 个元素?

来自分类Dev

在链接列表的最后一个元素中找到第k个

来自分类Dev

第k个置换的第i个元素

来自分类Dev

BeautifulSoup:查找元素的第n个出现

来自分类Dev

BeautifulSoup:查找元素的第n个出现

来自分类Dev

通过模式匹配在Scala中递归查找列表的第n个元素

来自分类Dev

转换数组中的第K个元素

来自分类Dev

返回第k个最小元素的函数

来自分类Dev

如何使用python列表理解更改列表列表中的第n个元素?

来自分类Dev

使用 foldl 或 foldr 返回列表中两个元素首次出现之间的整数距离的间隙函数。(Haskell)

来自分类Dev

删除列表的第n个元素

来自分类Dev

pandas-使用字典映射dataframe元素-如何访问值列表的第n个元素

来自分类Dev

添加第 8 个列表项时,仅使用 CSS 更改其他列表元素的属性

Related 相关文章

  1. 1

    Prolog在列表中查找第K个元素

  2. 2

    查找单链列表的第k个元素

  3. 3

    查找单链列表的第k个元素

  4. 4

    使用递归在Python列表中查找第K个最大元素

  5. 5

    查找单链列表的第K个到最后一个元素

  6. 6

    Haskell中列表的第K个元素

  7. 7

    Java:使用2个数组查找数组的第K个最大元素

  8. 8

    在扩展字符串中查找第k个元素

  9. 9

    在数组MIPS中查找第K个不同的元素

  10. 10

    最大堆查找第 k 个最小元素

  11. 11

    如何在Haskell中使用递归函数查找列表的第n个元素?和更多

  12. 12

    Racket,编写查找列表中第 n 个元素的函数

  13. 13

    使用Selenium Webdriver按类查找第n个元素

  14. 14

    使用分区的数组中第K个最小元素

  15. 15

    列表的第n个元素

  16. 16

    如何在不对列表进行排序的情况下找到列表的第k个最小元素?

  17. 17

    如何使用 foldl 删除列表的第 n 个元素?

  18. 18

    在链接列表的最后一个元素中找到第k个

  19. 19

    第k个置换的第i个元素

  20. 20

    BeautifulSoup:查找元素的第n个出现

  21. 21

    BeautifulSoup:查找元素的第n个出现

  22. 22

    通过模式匹配在Scala中递归查找列表的第n个元素

  23. 23

    转换数组中的第K个元素

  24. 24

    返回第k个最小元素的函数

  25. 25

    如何使用python列表理解更改列表列表中的第n个元素?

  26. 26

    使用 foldl 或 foldr 返回列表中两个元素首次出现之间的整数距离的间隙函数。(Haskell)

  27. 27

    删除列表的第n个元素

  28. 28

    pandas-使用字典映射dataframe元素-如何访问值列表的第n个元素

  29. 29

    添加第 8 个列表项时,仅使用 CSS 更改其他列表元素的属性

热门标签

归档