第八章:數字相關的型別類
Haskell中基本的判斷大小、數值運算等都不是語法結構,而是通過函式實現的,本章介紹與之相關的型別類和常用的函式。
data和型別約束:永遠不要在你的資料型別宣告前加上型別類的約束。型別約束應該應該用來約束普通函式的引數型別,進而幫助編譯器確定函式的行為,而不是約束資料的行為。
1.順序類 Ord
class (Eq a) => Ord a where
compare :: a -> a -> Ordering
(<), (<=), (>=), (>) :: a -> a -> Bool
max, min :: a -> a -> a
推導規則:按照建構函式書寫的順序,後面的建構函式建立的值大於前面的;相同的建構函式,則按照從前向後的位置順序比較引數的大小。
2.列舉類 Enum
那些可以被一一列舉的型別,比如Char,Bool。列舉類代表的是一個有序不重複的值的集合。
class Enum a where
succ, pred :: a -> a
--後/前一個元素
toEnum :: Int -> a
--列舉中對應次序的元素
fromEnum :: a -> Int
--元素在列舉中的次序
--如果次序超過了Int能表示的範圍,結果就不確定了
enumFrom :: a -> [a] -- [n..]
enumFromThen :: a -> a -> [a] -- [n,n’..]
enumFromTo :: a -> a -> [a] -- [n..m]
enumFromThenTo :: a -> a -> a -> [a] -- [n,n’..m]
-- Default declarations given in Prelude
推導規則:建構函式不需要引數的資料型別才可以使用Enum推導。
3.邊界類 Bounded
有上下邊界的資料型別
class Bounded a where
minBound, maxBound :: a
推導規則:上邊界和下邊界是按照建構函式的書寫順序決定的。
4.數字類 Num
數字類是Haskell中所有數字型別的父類型別類
Numeric Literals
fromInteger :: (Num a) => Integer -> a fromRational :: (Fractional a) => Rational -> a
Arithmetic and Number-Theoretic Operation
class (Eq a, Show a) => Num a where (+), (-), (*) :: a -> a -> a negate :: a -> a abs, signum :: a -> a fromInteger :: Integer -> a class (Num a, Ord a) => Real a where toRational :: a -> Rational class (Real a, Enum a) => Integral a where quot, rem, div, mod :: a -> a -> a quotRem, divMod :: a -> a -> (a,a) toInteger :: a -> Integer class (Num a) => Fractional a where (/) :: a -> a -> a recip :: a -> a fromRational :: Rational -> a class (Fractional a) => Floating a where pi :: a exp, log, sqrt :: a -> a (**), logBase :: a -> a -> a sin, cos, tan :: a -> a asin, acos, atan :: a -> a sinh, cosh, tanh :: a -> a asinh, acosh, atanh :: a -> a class (Real a, Fractional a) => RealFrac a where properFraction :: (Integral b) => a -> (b,a) truncate, round :: (Integral b) => a -> b ceiling, floor :: (Integral b) => a -> b class (RealFrac a, Floating a) => RealFloat a where floatRadix :: a -> Integer floatDigits :: a -> Int floatRange :: a -> (Int,Int) decodeFloat :: a -> (Integer,Int) encodeFloat :: Integer -> Int -> a exponent :: a -> Int significand :: a -> a scaleFloat :: Int -> a -> a isNaN, isInfinite, isDenormalized, isNegativeZero, isIEEE :: a -> Bool atan2 :: a -> a -> a gcd, lcm :: (Integral a) => a -> a-> a (ˆ) :: (Num a, Integral b) => a -> b -> a (ˆˆ) :: (Fractional a, Integral b) => a -> b -> a fromIntegral :: (Integral a, Num b) => a -> b realToFrac :: (Real a, Fractional b) => a -> b
整數的表示:Int 和 Integer,前者固定位元組表示,和c中長整型類似,後者處理大數,上下限與機器記憶體相關
與Float相比,Double精度高但速度慢
上一章的Fractional Floating 沒將Ord作為父類,但他們都是Real的例項,Ord是Real的父型別類。
quot rem div mod
其他說明
相關文章
- long型別相關型別
- c++任意變數型別獲取相關C++變數型別
- Oracle Lob型別相關引數以及效能影響Oracle型別
- 公司型別相關的幾個概念型別
- 第八章:變數、常量和基礎型別變數型別
- 字串型別數字order by字串型別
- 第八章 資料型別資料型別
- Mysql 基礎資料型別(無時間相關型別)MySql資料型別
- 【java反射】Class型別的相關操作演練Java反射型別
- 加密型別以及相關演算法加密型別演算法
- SSL數字證書型別與區別型別
- 數字影像處理相關練習
- 非型別的類别範本引數型別
- OMBA可以進行憑證型別相關的配置型別
- 關鍵字、資料型別、識別符號資料型別符號
- Python資料型別相關知識Python資料型別
- PHP資料型別轉換(字元轉數字,數字轉字元)PHP資料型別字元
- CO490 對於工廠 T666 的訂單型別 PP01 缺少訂單型別相關引數型別
- c++語言中類的私有型別或保護型別成員變數C++型別變數
- 數學建模 資料處理模型之變數相關性類(灰色相關聯、相關性分析)模型變數
- Go語言的識別符號、關鍵字、字面量、型別Go符號型別
- varchar型別的欄位儲存純數字的排序型別排序
- Python標準資料型別-數字Python資料型別
- PostgreSQL:數字——型別、運算子和函式SQL型別函式
- 1.金額數字轉字元型別字元型別
- 什麼是數字化和數字化轉型?區別在哪裡?
- 語音識別的特徵提取中的相關引數特徵
- 時間相關的工具類
- 字串字尾相關字串
- Redis 五種資料型別和相關操作命令Redis資料型別
- 第三章 資料型別相關功能資料型別
- 義大利數字支付行業相關資料行業
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- c語言變數的作用域,連結屬性,儲存型別&&static關鍵字C語言變數型別
- Python基礎:資料型別-數字(5)Python資料型別
- 正規表示式匹配各種型別數字型別
- FPGA數字訊號處理(24)數字相關器設計(簡化結構)FPGA
- FPGA數字訊號處理(25)數字相關器設計(經典結構)FPGA