如何获得复杂的真实部分。在haskell或其想象中?

时间:2014-02-17 17:16:50

标签: haskell

import Data.Complex
realPart :: (RealFloat a) => Complex a -> a
realPart (x :+ _) =  x
imagPart :: (RealFloat a) => Complex a -> a
imagPart (_ :+ x) =  x

这是我的代码,但是当我执行realPart 2:+3时,它给出了2.0:+ 3.0作为输出,我只需要2作为输出。有没有办法得到它? 当我执行imagPart 2:+3时,它会给出0.0:+ 3.0 作为我只需要3的输出。

2 个答案:

答案 0 :(得分:11)

函数应用程序比任何中缀绑定得更紧密,包括:+。因此,您拥有的内容被解析为(realPart 2) :+ 3,只是2 :+ 3(在realPart 2中,2被解释为复杂的Num字面值,即2 :+ 0)。

要防止这种情况发生,请使用parens或$进行手动分组:realPart $ 2 :+ 3将提供2。

答案 1 :(得分:6)

括号应该解决:

ghci> realPart (2:+3)
2.0

ghci> imagPart (2:+3)
3.0

如果不放括号,则表现如下:

ghci> (realPart 2) :+ 3
2.0 :+ 3.0