假设我想将5(整数)除以3(整数),我希望我的答案是Double。在Haskell中有什么不同的方法可以做到这一点?
答案 0 :(得分:3)
最常见的方法是将Integer
s转换为Double
然后将它们分开。您可以通过fromIntegral :: (Integral a, Num b) => a -> b
执行此操作,Integer
采用类似整数类型的任何值(例如Double
)并将其转换为任何类似数字的类型(例如let five, three :: Double
five = fromIntegral (5 :: Integer)
three = fromIntegral (3 :: Integer)
in five / three
)。
fromIntegral = fromInteger . toInteger
请注意toInteger
,其中Integral
是toInteger
类的一部分(Integer
,将类似整数的类型的值转换为相应的fromInteger
值),Num
是fromInteger
类的一部分(Integer
将Integer
值转换为任意数字类型的值。在这种情况下,由于您已经拥有fromInteger
值,因此可以使用fromIntegral
代替Rational
。
一种不太常见的方法是以某种方式创建let five, three, fiveThirds :: Rational
five = toRational (5 :: Integer)
three = toRational (3 :: Integer)
fiveThirds = five / three
in fromRational fiveThirds
数字并将其转换为:
Rational
创建Ratio
的另一种方式(以某种方式)取决于您正在使用的标准。如果您已导入Data.Ratio
(Haskell 98)或(%) :: (Integral a) => a -> a -> Ratio a
(Haskell 2010),您还可以使用let five, three :: Integer
fiveThirds :: Rational
five = 5
three = 3
fiveThirds = five % three
in (fromRational fiveThirds :: Double)
运算符:
[StructLayout(LayoutKind.Explicit)]
struct IndexEntry {
[FieldOffset(0)]
public byte key;
[FieldOffset(4)]
public int lastValueIdx;
[FieldOffset(8)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.PART_ENTRY_SIZE)]
public long[] values;
}
答案 1 :(得分:0)
(/) :: Fractional a => a -> a -> a
的类型签名是:
Double
这意味着,如果您想从/
获得fromIntegral
,则需要提供双打,而不是整数。因此,我建议使用fromIntegral (5 :: Integer) / fromIntegral (2 :: Integer) == 2.5
之类的函数,如下所示:
var tabItem = new TabItem();
tabItem.Header = "My Tab Header";
tabItem.Content = new UserControl1();
MainTabControl.Items.Add(tabItem);