Haskell递归分配

时间:2018-09-28 14:31:27

标签: haskell recursion

我目前正在从事一项专注于递归编程的任务。我在使用唯一类型的两个特定函数时遇到麻烦。数字是数字的反向列表,数字是数字中的数字。

Example of Number = [7,5] 57
Example of Digit [1]

addb从tge提供两个列表,将它们反向,然后将其更改为int。将两个整数相加,然后将总数按相反的顺序逐个放入列表中。 示例:

>>> addb [5,7] [8,9] 0
[3,7,1] 

convertNumList用于获取一个数字并创建一个“数字”列表。 示例:

>>> convertNumList 75
[5,7]

我能够找到convertNumList的解决方案,但它不是递归的。我对addb的想法与对add​​b的想法是一致的,但是我在如何递归添加两个列表时遇到了麻烦。抱歉,这是我第一次发布问题。

addb :: Number -> Number -> Digit -> Number
-- Fill in your code here
addb xs ys c
= [0,0,1]

convertNumList :: Int -> Number
converNumList 0 = []
convertNumList n =[n `mod` 10 ,n`div`10]

1 个答案:

答案 0 :(得分:-1)

您正在实现十进制全加器

Prelude> let addb [] ys 0 = ys
Prelude|     addb xs [] 0 = xs
Prelude|     addb [] ys 1 = addb ys [1] 0
Prelude|     addb xs [] 1 = addb xs [1] 0
Prelude|     addb (x:xs) (y:ys) b = s: addb xs ys r
Prelude|                where (r,s) = divMod (x+y+b) 10
Prelude|

Prelude> addb [5,7] [8,9] 0
[3,7,1]

不确定是否可以进一步简化