gpt4 book ai didi

haskell - 获取列表的 gcd

转载 作者:行者123 更新时间:2023-12-04 19:01:40 29 4
gpt4 key购买 nike

我是 Haskell 的新手,实际上我才刚开始,我想对我将要问的问题有一点提示。

我目前正在尝试获取给定列表的 GCD。例如,列表 [3, 6, 9] 将返回 3。

目前,我想到了以下方法,我是否朝着好的方向发展?

let getGCD l = map (\x y -> gcd x y) l

最佳答案

不完全,你不想要map而是折叠。 map会让你统一变换列表中的每个元素,所以你给它一个局部变换 a -> b它为您提供了全局转换( [a] -> [b] )。这真的不是你想要的。

作为折叠的快速入门,有一整套它们都让我们表达我们通过重复将函数应用于初始值、下一个元素和列表,然后重复该应用程序的结果来构建的计算新的初始值。所以foldl' (+) 0 [1, 2, 3, 4]会这样吗

 foldl' (+) 0 [1, 2, 3, 4] ==>
foldl' (+) 1 [2, 3, 4] ==>
foldl' (+) 3 [3, 4] ==>
foldl' (+) 6 [4] ==>
foldl' (+) 10 [] ==> -- For empty lists we just return the seed given
10

你能看到如何将你的问题插入到这个框架中吗?

更多提示

您想要获取一个列表并计算一个取决于列表中每个元素的结果,例如
gcdAll :: [Int] -> Int
gcdAll l = foldl' step initial l

更接近你想要的地方 step获取您迄今为止处理的列表的当前 gcd 和列表的下一个元素,并返回下一个值,初始值是开始的值(如果 l 为空,则返回什么。因为没有真的是一个理智的值(value),我会把它分成
gcdAll :: [Int] -> Maybe Int
gcdAll [] = Nothing
gcdAll (h : rest) = Just $ foldl' step h rest

以便您正确地发出失败的可能性,毕竟,什么是空的 gcd ?

请注意 foldl'进口自 Data.List .

关于haskell - 获取列表的 gcd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36317482/

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