Haskell 在使用之前,是否需要将输入更改为函数?

Haskell 在使用之前,是否需要将输入更改为函数?,haskell,Haskell,我正在尝试编写一个函数,它将两个表示自然数的数字的列表取反,然后求和。列表中也可能有任意数量的尾随0 plus :: [Int] -> [Int] -> [Int] -- Ex: "plus [0,1,2,0] [2,1,0]" meaning 210+12 我有3个单独的函数,它们执行问题的不同部分,我无法让它们一起工作: cleanString将数字按顺序重新排列(最重要的第一位)并删除任何额外的0(cleanString[0,1,2,0]输出[2,1,0]): fromDi

我正在尝试编写一个函数,它将两个表示自然数的数字的列表取反,然后求和。列表中也可能有任意数量的尾随0

plus :: [Int] -> [Int] -> [Int]
-- Ex: "plus [0,1,2,0] [2,1,0]" meaning 210+12
我有3个单独的函数,它们执行问题的不同部分,我无法让它们一起工作:


cleanString
将数字按顺序重新排列(最重要的第一位)并删除任何额外的0(
cleanString[0,1,2,0]
输出
[2,1,0]
):

fromDigits
采用类似于
[2,1,0]
的列表,并给出
210

然后,在实际的“plus”函数中,我无法让它在输入列表进入
fromdights
并添加结果的两个int之前,通过
cleanString
运行输入列表。从数字(x.cleanString)处编译错误


cleanString::[Integer]->[Integer]
--反转字符串,然后修剪任何前导零
cleanString x=dropWhile(整数
fromDigits xs=辅助xs 0
其中,aux[]acc=acc
辅助(x:xs)附件=辅助(附件*10)+x)
加::[Integer]->[Integer]->Integer
加上xy=(fromDigits(x.cleanString))+(fromDigits(y.cleanString))

x
不是一个函数,所以用任何东西
都没有意义。你不应该做
x.cleanString
,而是
cleanString x
y
也一样。通过这些更改,你的程序似乎对我有效:

plus x y = (fromDigits (cleanString x))+(fromDigits (cleanString y))
如果您想使用
,即使您不需要,也可以在函数上使用,而不是在
x
y
上:

plus x y = ((fromDigits.cleanString) x)+((fromDigits.cleanString) y)

非常感谢!我希望我能提高投票率,但我的声誉太低,修复了我的问题。编辑:我不能更改可见分数,感谢这样的情况,你可以使用
Data.Function.on
combinator!
plus=(+)`on`(fromDigits.cleanString)
fromDigits(cleanString x)有什么问题?
plus x y = ((fromDigits.cleanString) x)+((fromDigits.cleanString) y)