我不确定LCF是什么,但GCF是Haskell的最爱.使用Euclidean Algroithm,您可以真正了解Haskell的工作原理.http://en.wikipedia.org/wiki/Euclidean_algorithm这里有一个关于如何设置算法的很好的解释http://en.literateprograms.org/Euclidean_algorithm_(Haskell).
这种类型的递归在Haskell中很常见,它表明了语言的表达方式.
gcd a 0 = a
gcd a b = gcd b (a `mod` b)
Run Code Online (Sandbox Code Playgroud)
这使用参数上的模式匹配来表示任何数字的最大公因数,0表示第一个数字.如果数字都不为零,则寻找第二个的最大公因子,第二个是第二个.最终这将在第二个参数中达到0.这将触发第一个模式并返回第一个参数,即答案.
[编辑]
该函数实际上应该是:
gcd a 0 = a
gcd a b = b `seq` gcd b (a `mod` b) where
Run Code Online (Sandbox Code Playgroud)
这将强制评估前一个递归步骤(a modb),并且如果您是GCDing 1243235452和6095689787662,将阻止在内存中构建巨大的thunk .Seq强制参数进入其"弱头正常形式"或评估参数的最外层数据结构.