gpt4 book ai didi

list - 如何在 Haskell 中从两个列表(+额外条件)中添加值

转载 作者:行者123 更新时间:2023-12-01 12:37:55 26 4
gpt4 key购买 nike

这个练习我遇到了问题。很长一段时间以来,我一直在努力解决这个问题,寻找东西,但我做不到。

定义函数:

addLnat :: [Int] -> [Int] -> [Int]
mulLnat :: [Int] -> [Int] -> [Int]

addLnat 将两个数组中的数字相加,例如。

addLnat [4,5,6] [8,5,2] ->  [2,1,9]

因为 [4+8 给出 2 个进位 1,5+5+1 给出 1 个进位 1,6+2+1 = 9]

Lnat,是一个“列表自然数”,表示为以 10 为底的数字列表,从最低位开始。所以数字 654 是 [4,5,6]。

我得到的是:

addLnat :: [Int] -> [Int] -> [Int]
addLnat _ [] = []
addLnat [] _ = []
addLnat (x:xs) (y:ys) = (if (x+y) > 9 then x+y-10 else (x+y)):(addLnat xs ys)

我添加数字并忽略进位。不知道如何解决。如有任何帮助,我们将不胜感激。


我已经根据 user5402 评论改进了解决方案,因此创建了 addLnat' cr xs ys,但是当我将携带作为参数传递的内容时,它无法加载 - 最有可能的是我得到了语法错误:((cr暂时为0,以后会被maths代替)。

addLnat' c (x:xs) (y:ys) = d : addLnat' cr xs ys 
where d = if c+x+y < 9 then x+y else c+x+y-((quot (c+x+y) 10)*10)
cr = 0

有什么想法吗?

最佳答案

我不太擅长 haskell,但也许这会有所帮助;

add::[Int]->[Int]->[Int]
add x y = add' 0 x y

我们在那里定义了一个函数 add,它将使用 add' 来添加两个列表。主要思想是“保存”进位并仔细处理极端情况。这里carry保存在“变量”rest中

    add'::Int->[Int]->[Int]->[Int]
add' 0 x [] = x
add' rest (x:[]) (y:[]) = [(r `mod` 10),(r `div` 10)]
where r = x+y+rest
add' y (x:xs) [] = add' (r `div` 10) ((r `mod` 10):xs) []
where r = x+y
add' rest (x:xs) (y:ys) = (r `mod` 10) : (add' (r `div` 10) xs ys)
where r = x+y+rest

列表 x 必须大于列表 y 但这不是问题

add [5,7,8] [4,3,2]  => [9,0,1,1] (correct)
add [1,2,3] [4,5,6] => [5,7,9,0] (correct)

关于list - 如何在 Haskell 中从两个列表(+额外条件)中添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893357/

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