gpt4 book ai didi

list - haskell错误,压缩列表

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

我正在学习 Haskell,我尝试编写一个以某种方式压缩两个列表的代码。我的代码应该在这些输入中返回这些列表

输入:

[1,2,3] [6,5,4] 

[1,2,3] [6,5]

[1,2] [6,5,4]

输出:

[(1,6),(2,5),(3,4)]
[(1,6),(2,5),(3,3)]
[(1,6),(2,5),(4,4)]

我的代码是这样的

zip' :: (Integral i, Integral b) => [i] -> [b] -> [(i,b)]
zip' [][] = []
zip' (x:xs)[] = bmi x : zip' xs []
where bmi x = (x,x)
zip' [](x:xs) = bmi x : zip' [] xs
where bmi x = (x,x)
zip' (x:xs) (y:ys) = bmi x y : zip' xs ys
where bmi x y = (x,y)

我期待您的回复

最佳答案

问题是您正在获取两个具有不同元素类型的列表,然后当一个列表用完时尝试使用其他列表元素来代替它。这不起作用,因为它们没有相同的类型。

最简单的解决方案是将类型签名修复为

 zip' :: [a] -> [a] -> [(a, a)]

另一个选项是尝试在列表的每个元素之间进行转换,我之所以提到它是因为您最初有 Integral 约束。

 zip' :: (Integral i, Integral j) => [i] -> [j] -> [(i, j)]

现在您的 bmi 看起来像这样

  ...
where bmi x = (x, fromIntegral x)
...
where bmi x = (fromIntegral x, x)
...
where bmi x y = (x, y)

关于list - haskell错误,压缩列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283222/

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