gpt4 book ai didi

haskell - 获取列表中元素的偶数和奇数位置 - Haskell 相互递归

转载 作者:行者123 更新时间:2023-12-03 05:54:42 25 4
gpt4 key购买 nike

我最近开始学习 Haskell。

我在网上找到了这段代码,它返回列表中所有偶数/奇数位置的元素。

它利用了相互递归,但我似乎无法理解它内部是如何工作的。

evens (x:xs) = x:odds xs
evens _ = []

odds (_:xs) = evens xs
odds _ = []

特别是,我不明白列表如何前进并评估所有元素。即使没有明确的索引检查,它如何检查偶数位置

有人能够提供见解吗?

最佳答案

首先,让我们就一件事达成一致:我们大多数时候都使用基于 0 的索引,对吧?所以,如果我问你列表中位置 2 的元素是什么

a : b : c : d : []

你会回答c编辑:如果您不熟悉 Haskell 表示法,: 是列表构造函数,a : b 表示通过前置 创建的列表>a 位于列表 b 前面。

转向偶数位置的元素,ac 将是显而易见的答案,而 bd 将处于奇数位置。我们来看看even的定义。

evens (x:xs) = x:odds xs
evens [] = []
  • 基本情况很简单:空列表中的偶数位置没有元素

  • 归纳情况表明位置 0 (x) 中的元素位于偶数位置——事实确实如此——并且它还表明位于偶数位置的所有其他元素列表(x:xs) 位于列表xs 中的奇数位置。事实上,列表 (x:xs) 中位置 2 的元素位于列表 xs 中的位置 1,位置 4 的元素位于位置 3,依此类推。 ;这有意义吗?

使用相同的推理,可以得出列表(x:xs)中奇数位置的元素是列表xs中偶数位置的元素,这正是上面赔率的定义。

关于haskell - 获取列表中元素的偶数和奇数位置 - Haskell 相互递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com