-
printfn的使用
寫printfn,主要是爲了方便查閱3+3 //val it : int = 6
3+3 printfn "%x" it;;
//6
val it : unit = ()
如果不加;;就運行不出來,必須加;;,是什麼意思呢?
F#使用;;加上回車表示向交互環境提交輸入語句。 提交後交互環境執行這些語句。it是交互環境下系統默認名稱。不提交系統不知道it是什麼。
一般來說printfn 後面跟着:%[flags] [width] [.precision][type]
[ ]的意思是可以用也可以不用。
flag可以用哪些值呢?又代表什麼意思呢?
width指:結果的最小寬度的整數
%6d 就是添加空格使結果滿足6個字符的要求(這個沒有用到flags)
6就是width
d是下面要講的type
type又可以用哪些值呢?又代表什麼意思?
- 註釋和續行符
- 註釋:這個不多說,看圖
- 續行:F#使用縮格方式表示語句隸屬關係(這是在visual studio下的方法)
又有:在交互環境下(也就是黑底白字命令行那種),使用;;表示一句結束,不加;;就表明無論如何都是一句話,即使在另一行也屬於前一條語句。
vs中的例子:
8和9必須縮格在add後面,表示是add的子部分,否則報錯。let add x y = x + y //val add : x:int -> y:int -> int let x = add 8 9 //val x : int = 17
- 運算符
-
算數運算符,優先級從高到低排列
這就是我們平常使用的運算規則 -
關係運算符
let x1 = 9 >= 9 //val x1 : bool = true let Gtfun x y = x > y let x2 = Gtfun 8 9 //val Gtfun : x:'a -> y:'a -> bool when 'a : comparison val x2 : bool = false
根據前面學的泛型,必須是相同的泛型才能比較,才能得出bool類型。
-
邏輯運算符
let a = true let b = false let y1 = a&&b let y2 = a||b
//val a : bool = true
//val b : bool = false
//val y1 : bool = false
//val y2 : bool = true -
位運算符
let x = 0x22 //val x : int = 34 轉換成十進制就是34,二進制00100010 let y = 0xab //val y : int = 171 同理十進制是171,二進制101010111 printfn "%x"x printfn "%d"x //22 //34 //val it : unit = () 代表最後printfn的特徵是unit類型
let x1 = ~~~x printfn " %x"x1 // ffffffdd 求反的16進制結果對應十進制的-35 //val x1 : int = -35 按位求反之後的值 //val it : unit = ()
let x2 = x &&& y printfn"%x"x2 //22 按位與運算後的值,注意這是16進制,下面纔是對應的十進制 //val x2 : int = 34 //val it : unit = ()
let x3 = x|||y printfn"%x"x3 //ab 按位或後的16進制結果 //val x3 : int = 171 //val it : unit = ()
let x4 = x^^^y printfn"%x"x4 //89 按位異或後的16進制結果 //val x4 : int = 137 //val it : unit = ()
let x5 = x<<<2 printfn"%x"x5 //88 將x的二進制值左移兩位,空位補0 //val x5 : int = 136 //val it : unit = () //以下是驗證 let x6 = 0b10001000 //這個x是二進制左邊去掉兩個數,右邊加上兩個0的結果,**0b**表示二進制 printfn"%x"x6 //88 //val x6 : int = 136 //val it : unit = ()
上面的運算都是基於二進制運算的