gpt4 book ai didi

Haskell:错误获取元组列表 ->输出元组列表

转载 作者:行者123 更新时间:2023-12-02 14:55:11 25 4
gpt4 key购买 nike

因此,我在学习 Haskell 教程时玩得很开心……一个挑战是:

“编写一个 Lambda 表达式和映射,获取一个元组列表并生成一个元组列表。该列表包含直角三角形 a 和 b 的两条边的长度。生成一个包含所有三个边的长度的列表边,第三边是 c,用毕达哥拉斯定理找到”(当然)。

示例输入/输出如下:

[(3,4),(5,16),(9.4,2)]
== [(3.0,4.0,5.0),(5.0,16.0,16.76305461424021),(9.4,2,9.610411021387172)]

所以我先做了一些练习,比如得到毕达哥拉斯定理的正确答案,然后输入一个元组但像往常一样输出,然后输入并输出一个元组——所有这些都奏效了,最终得到了这个Lambda 表达式:

pythagLambdaTupleInOut = (\(a,b) -> (a,b,(sqrt $ a^2 + b^2)))

它编译并生成了这个:

ghci > pythagLambdaTupleInOut (3,4)
(3.0,4.0,5.0)

这样就可以了...然后我尝试了:

pythagLambdaListTupleInOut = (\[(a,b)] -> [(a,b,(sqrt $ a^2 + b^2))])

它可以编译,但是当我尝试使用它时会发生这种情况:

ghci > pythagLambdaListTupleInOut [(3,4),(5,16)]
*** Exception: six.hs:1376:31-68: Non-exhaustive patterns in lambda

有什么线索是我遗漏的吗? map 有问题吗?根据教程中的示例,我不确定如何在那里工作 map...

顺便说一句,Haskell 非常迷人而且非常酷!

最佳答案

你要找的函数是

pythagLambdaListTupleInOut = map (\(a,b) -> (a,b,(sqrt $ a^2 + b^2)))

您的版本失败,因为 [(a,b)] 模式表示具有单个元素的列表,并且该元素是元组。当您传递带有两个元组的列表时,haskell 无法进行模式匹配。

关于Haskell:错误获取元组列表 ->输出元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313577/

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