F#入门-第二章 F#基础-第七节 条件分歧
来源:互联网 发布:淘宝语嫣 编辑:程序博客网 时间:2024/05/01 06:43
■ 条件分歧
F#中,关于条件分歧有几种表达方法,if语句为其中之一。使用if语句,可以编程表达“如果...就...”的条件。
F#中对于if语句的定义如下所示。
用[]括起来的地方为可选项,语句后加*的地方表示可语句可重复书写。
- if
- if语句 := if 语句1 then 语句2 [elif 语句3 then 语句4]* [else 语句5]
上面这段语句的意思是
如果if语句1条件成立(语句1的值为true),则继续执行语句2。
否则(elseif)如果语句3条件成立(语句3的值为true),则继续执行语句4。
否则(else)执行语句5。
如果条件成立,执行了后续语句之后,不再执行其他不符合条件的语句。
语句1与语句3为条件判断语句,判断语句中的条件是否成立(返回true或false)。
同时,语句2,语句4,语句5必须返回同样的数据类型。
if语句默认返回unit型的值,所以如果省略“else 语句5",则语句2与语句4必须要将返回值写成unit类型的值(),这一点请注意。
同时,整段语句返回程序真正执行的语句所返回的值。
if a=1 then print_endline "hello world";;
上面这段语句表示,如果a的值为1,则显示"hello world"。
“=“符号判断等式两边是否相等。
相等返回true
不相等返回false
请注意在c语言及Java语言中,=表示赋值,==才表示条件判断。
let time = 15 in
if time < 11 then printfn "Good morning"
elif time < 16 then printfn "Hello"
elif time < 20 then printfn "Good evening"
else printfn "Good night";;
以上这段语句根据不同的time值,显示相对应的字符串。将time修改成15之外的值,将显示与之相对应的字符串。
if true then 1 else "one";; /这句将产生错误
请注意以下示例。
语句2与语句5的数据类型不同,所以也会产生错误。
if true then 1;; //这句也是错误的
if true then 1 else 2;; //这样写是正确的
上面这个示例中,因为else被省略了,所以else语句返回(),1为int型,所以引发编译错误。
在没有熟悉F#的时候,有很多特别容易忽略而引发错误的地方,所以请特别注意.
let kekka = if 1=2 then "OK" else "NG" inprint_endline kekka;;
上述示例中,1与2如果相等,kekka变量值绑定为OK,如果不相等,变量值绑定为NG,然后将该变量值显示。
习惯使用c语言或Java语言的人可能会看不懂,但是F#中是可以这样直接利用if语句所返回的值的。
如下例所示,if语句可以看起来好像是函数,但是实际上与函数不同。
请确认如下程序。
//if函数的定义
//cond如果为true,则返回e1,如果为false,则返回e2
let if2 cond e1 e2 = if cond then e1 else e2;;
//使用if函数
> if2 true 1 0;;
val it : int = 1
> if true then 1 else 0;;
val it : int = 1
//但是如果书写带有副作用的语句
> if true then printfn "OK" else printfn "NG";;
OK
val it : unit = ()
> if2 true (printfn "OK") (printfn "NG");;
OK
NG
val it : unit = ()
//if与函数不同,函数的时候,全体参数都参与语句。
//因此,以下代码中if2函数会做loop循环。
> if true then printfn "OK" else while true do () done;;
OK
val it : unit = ()
> if2 true (printfn "OK") (while true do () done);;
OK
//这里会进行死循环
- Interrupt
■ 单分号与双分号
双分号用来表示语句结束。
单分号用来在语句中作分隔。
let str = "hello" in
print_string str;
print_endline "world";;
在介绍基本类型的时候,我们以解释过任何语句都会返回某个值。用单分号做分隔时,语句返回分隔的最后一句语句的返回值,单分号分隔符前面的语句的返回值均被舍弃,同时,使用单分号的语句如果返回()以外的值,均被判断为错误,所以,这种情况下需要使用到ignore函数。
open System.Windows.Forms;;
let debug = true in
if debug then ignore (MessageBox.Show "in debug");;
执行以上这段代码,将显示“in debug"对话框,MessageBox.Show函数返回的值为DialogResult类型,所以为了让它返回unit类型,需要使用ignore函数。
另外,如果使用管道运算符,可以编写类似以下代码。
MessageBox.Show "in debug" |> ignore;;
另外,因为if语句后面紧跟语句,所以编写复杂的语句时需要用括号括起来。
let debug = false in
if debug then
print_string "now ";
print_endline "in debug";;
let debug = false in
if debug then
(print_string "now ";
print_endline "in debug");;
关于常州蓝博纺织机械有限公司的产品被常州蓝博节能设备有限公司非法假冒的声明
- F#入门-第二章 F#基础-第七节 条件分歧
- F#入门-第二章 F#基础-第二节 注释
- F#入门-第二章 F#基础-第六节 匿名函数
- F#入门-第二章 F#基础-第十四节 数组
- F#入门-第二章 F#基础-第十九节 option类型
- F#入门-第二章 F#基础-第八节 for循环
- F#入门-第二章 F#基础-第九节 while循环
- F#入门-第二章 F#基础-第十节 引用类型
- F#入门-第二章 F#基础-第十一节 mutable关键字
- F#入门-第二章 F#基础-第十三节 元组
- F#入门-第二章 F#基础-第十五节 记录
- F#入门-第二章 F#基础-第一节 基本数据类型
- F#入门-第二章 F#基础-第三节 运算符
- F#入门-第二章 F#基础-第四节 let语句-值的绑定
- F#入门-第二章 F#基础-第十二节 列表(list)
- F#入门-第二章 F#基础-第十六节 函数的类型
- F#入门-第二章 F#基础-第十七节 异常(一)
- F#入门-第二章 F#基础-第十九节 模式匹配(一)
- 什么是博士?
- 刷新别人网页的方法和防止被别人恶意刷新网页
- C# 中压缩与解压缩的方法
- 对敏捷开发的误解
- jsp页面显示新闻.公告之类的上一篇下一篇
- F#入门-第二章 F#基础-第七节 条件分歧
- 《云计算应用架构》连载一:什么是云?
- 一个死锁的脚本(谁锁谁)
- 用JavaScript调用FCKeditor
- Sample Post From a File
- 用户体验!=挑剔的美工设计
- 计算机编程的24条法则
- js拖拽
- js 把一个网页设为首页和收藏 只适用ie和火狐