gpt4 book ai didi

Haskell - 以不同方式映射奇数放置值和偶数放置值

转载 作者:行者123 更新时间:2023-12-04 06:25:58 24 4
gpt4 key购买 nike

有没有简单的方法。要获取数字列表,请说 123456。然后将奇数乘以 3,将偶数乘以 1。

即 (1 * 3) + (2 * 1) + (3 * 3) + (4*1) + (5*3) + (6*1)

我正在考虑沿线某处的 map 功能。但我不知道如何将 *3 映射到奇数放置值。哦,如果你能给我一个不是前奏的版本,那会很像实际的一个或多个函数,就好像它是从外部 haskell 文件中导入的一样

谢谢您的帮助

最佳答案

好的,正如我之前在评论中所写,zipWith (*) (cycle [3,1]) xs就是你要找的。但首先,一个小的挑剔:列表的头部我会称之为第零个元素,这就是为什么我切换了 1 和 3 :-)

我们来看一个简单的例子;让 xs[9,8,7,3,2] . cycle [3,1]只是一遍又一遍地重复它的论点,所以这将是一个以 [3,1,3,1,3,1,..] 开头的无限列表。什么 zipWith f xs ys是取 xs 的头部元素和 ys 的头部元素并申请 f (应该是两个参数的函数)到这些元素 - f 的结果然后进入zipWith结果的前面.如果 xs 或 ys 之一变为空,我们就完成了;否则我们就继续前进。

所以结果的第一个元素是 (3 * 9) ,然后 (1 * 8) , (3 * 7) , (1 * 3) , (3 * 2)我们完成了!

你可以看看zipWith的定义here .

如果你真的不想使用预定义的函数,你可以定义一个“交替映射”,它采用两个函数而不是一个函数,将其中的第一个应用于参数列表的头部,并在递归调用时切换函数。我会让你弄清楚那里的细节......

关于Haskell - 以不同方式映射奇数放置值和偶数放置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942101/

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