F#入门-第二章 F#基础-第三节 运算符

    F#语言中,存在许多不同种类的运算符。

算术运算符
7 + 2;;                 //加法运算符
7 - 2;; //减法运算符
7 * 2;; //乘法运算符
7 / 2;; //整除运算符(求商)
7 % 2;; //整除运算符(求模数)
-7;; //负号运算符


    以上为执行整数四则运算的运算符。
    在Ocaml语言中,具有将浮点数float数进行算术运算的运算符,F#语言中为了和Ocaml语言相兼容,也使用这些运算符。(注意:与Ocaml语言兼容的算术运算符在解释器中不能正常使用,只能在编译器中使用)

兼容的算术运算符
7.0 +. 2.0;;          //加法运算符
7.0 -. 2.0;; //减法运算符
7.0 *. 2.0;; //乘法运算符
7.0 /. 2.0;; //除法运算符

//在F#中,推荐前面不加.的写法
7.0 + 2.0;;
//同时,小数部分为0的时候可以采取如下的简略写法
7. + 2.;;


    另外,F#与Ocaml不同,允许运算符重载(overload),大多数算术运算符都具有这种功能。
    但是,关于运算符,也有必须要注意的地方,就是必须是相同数据类型的数值才能进行运算。

以下写法为错误的
1.0 + 2;;             //float与int相加


    这种时候,需要使用到将数据类型进行转换的转换函数。
   

转换函数
1.0+float 2;;                   //编译器与解释器中都能使用

1.0 + Float.of_int 2;;          //F#方式,只在编译器中能使用

1.0 +. float_of_int 2;;        //OCaml方式,只在编译器中能使用


    在VisualStudio中,使用转换函数的时候,VisualStudio自带的智能感知(intellisense)功能可以自动显示一种数据类型可以转换成什么数据类型,从而节省查阅语言手册的时间。智能感知是辅助编程人员输入程序的一种功能。
   
    除了算术运算符外,还有许多其他种类的运算符。

关系运算符
1=2;;           //1与2是否相等
1<>2;;          //1与2是否不相等
1<2;;          //1是否小于2
1>2;;          //1是否大于2
1<=2;;         //1是否小于等于2
1>=2;;         //1是否大于等于2
1==2;;         //1与2是否同一对象(不推荐,只在编译器中能使用)
1!=2;;         //1与2是否不同对象(不推荐,只在编译器中能使用)


    使用关系运算符将两个值进行比较时,返回以下两个值中的一个。
    true(条件成立时)
    false(条件不成立时)

逻辑运算符
not true;;              //否定运算符:对于true的否定。返回false
1<=2 && 2<=3;;      //与运算符 如果1小于等于2,而且2小于等于3,则返回true
1<=2 || 2<=1;;      //或运算符 如果1小于等于2,或者2小于等于1,则返回true



    逻辑运算符将两个bool值进行运算,然后返回true或false.
    同时,必须注意以下两点:
    进行与运算时,第一个条件不成立,则返回false,不对之后的条件进行判断。
    进行或运算时,第一个条件成立,则返回true,不对之后的条件进行判断。

其他运算符(连结运算符等)
"hello" ^ "world";;          //字符串连结
1::[4;5;6;];;                //数值与list连结
[1;2;3;] @ [4;5;6;];;        //数组与list连结
1 |> (+) 2;;                 //管道运算符,将1的值传递给后面,与2相加
1 |> (+) 2 |> ( * ) 3;;      //管道运算符,将1的值传递给后面,与2相加后传递给后面,乘以3
(( * ) 2) >> ((+)1)          //函数合成,乘以2后与1相加的函数
(( * ) 2) << ((+)1)          //函数合成,与1相加后乘以2的函数


    关于管道运算符,有诸如(+),( * )等等管道运算符。将涉及到两个以上的数值计算的+等运算符用括号()括起来,可以象两个或多个参数的函数那样使用。参与运算的数值为函数的参数。
    因为F#语言中,注释的开始使用的是(*,所以只有乘法运算的时候(与*当中要加入空格,变成( *。
    管道运算符的用法与如下函数的用法相同。

    (将函数用()括起来则可以定义两个参数的函数)
    关于管道运算符在后文会有详细介绍。

我的管道运算符||
> let (||>) f g = g f;;
val ( ||> ) : 'a -> ('a -> 'b) -> 'b
> 1 ||> (+) 2;;
val it : int = 3


    同样的,函数合成的用法与以下函数的用法相同。

我的函数合成运算符
> let (<<) f g x = f (g x);;
val ( << ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
> let (>>) f g x = g (f x);;
val ( >> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
> ((( * ) 2) >> ((+)1)) 10;;
val it : int = 21
> ((( * ) 2) << ((+)1)) 10;;
val it : int = 22



    本节中所有示例程序运行如下

本节中示例程序
> -7;;
val it : int = -7
> 7 + 2;;
val it : int = 9
> 7 - 2;;
val it : int = 5
> 7 * 2;;
val it : int = 14
> 7 / 2;;
val it : int = 3
> 7 % 2;;
val it : int = 1
> 7.0 +2.0;;
val it : float = 9.0
> 7.0 -2.0;;
val it : float = 5.0
> 7.0 *2.0;;
val it : float = 14.0
> 7.0 /2.0;;
val it : float = 3.5
> 1=2;;
val it : bool = false
> 1<>2;;
val it : bool = true
> 1<2;;
val it : bool = true
> 1>2;;
val it : bool = false
> 1<=2;;
val it : bool = true
> 1>=2;;
val it : bool = false
> 1==2;;
val it : bool = false
> 1!=2;;
val it : bool = true
> not true;;
val it : bool = false
> 1<=2 && 2<=3;;
val it : bool = true
> 1<=2 || 2<=1;;
val it : bool = true
> "hello" ^ "world";;
val it : string = "helloworld"
> 1::[4;5;6;];;
val it : int list = [1; 4; 5; 6]
> [1;2;3;] @ [4;5;6;];;
val it : int list = [1; 2; 3; 4; 5; 6]
> 1 |> (+) 2;;
val it : int = 3
> 1|> (+) 2 |> ( * ) 3;;
val it : int = 9
> let (<<) f g x = f (g x);;
val ( << ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
> let (>>) f g x = g (f x);;
val ( >> ) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
> ((( * ) 2) >> ((+)1)) 10;;
val it : int = 21
> ((( * ) 2) << ((+)1)) 10;;
val it : int = 22

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值