我试图在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)
有人可以帮我改进这个功能吗?
非常感谢!
答案 0 :(得分:2)
括号不表示Haskell中的函数应用程序。例如,这些是等价的。
lcm head(xs) last(xs)
lcm head xs last xs
即,函数lcm
提供了参数head
,xs
,last
和xs
。
括号 do 允许您通过将函数与其参数分组来指定函数应用程序。
lcm (head xs) (last xs)
答案 1 :(得分:0)
您应该使用模式匹配来解构列表:
multiLCM (x:xs) = lcm x (multiLCM xs)
multiLCM [x] = ???