在Haskell中递归实现LCM

时间:2016-07-28 17:56:26

标签: haskell

我试图在Haskell中编写自己的多个LCM函数,该函数计算给定列表中所有元素的LCM。我尝试使用属性lcm(a,b,c)= lcm(a,lcm(b,c))来使其递归。到目前为止,这是我能想到的,但它给了我一些我无法理解的错误。

 multLCM xs 
    | length(xs) == 2 = lcm head(xs) last(xs)
    | length(xs) > 2 = lcm head(xs) multLCM(drop 1 xs)

有人可以帮我改进这个功能吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

括号不表示Haskell中的函数应用程序。例如,这些是等价的。

lcm head(xs) last(xs)
lcm head xs  last xs

即,函数lcm提供了参数headxslastxs

括号 do 允许您通过将函数与其参数分组来指定函数应用程序

lcm (head xs) (last xs)

答案 1 :(得分:0)

您应该使用模式匹配来解构列表:

multiLCM (x:xs) = lcm x (multiLCM xs)
multiLCM [x]    = ???