在Haskell中添加两个复数

时间:2017-04-15 10:11:31

标签: haskell

我在Haskell中添加了两个复数,如下所示:

data Complex = C
{ realC :: Double
, imgC  :: Double
} deriving Show


addC :: Complex -> Complex -> Complex
addC (C a b) (C c d)= C (a+c) (b+d)

我的问题是:我可以使上述功能(addC)无点吗?

1 个答案:

答案 0 :(得分:3)

烨:

addC = ap (ap . (C .) . (. realC) . (+) . realC) ((. imgC) . (+) . imgC)

显然我不推荐这个。您可以通过在#haskell IRC频道中询问lambdabot指向免费的内容,或者自己下载并使用from Hackage来自学。这是我运行以获得上述定义的命令:

?pl addC l r = C (realC l + realC r) (imgC l + imgC r)

但是,在手动操作时,通常可以使结果更具可读性。例如:

addC = liftA2 (liftA2 C) ((+) `on` realC) ((+) `on` imgC)

即使有这个有点可辨认的版本,我仍然非常喜欢你写的代码;你的代码很简单,它的功能非常明显,而且这种风格很难让代码出错。