函数编程(Haskell) 学习笔记(一)

目录

0. 进入/退出交互模式ghci

1. 简单的运算

2. 简单的函数

3. Haskell的if语句

4. 列表

5. 区间

6. 列表推导式

7. 元组


0.  进入/退出交互模式ghci

安装好Haskell,命令行敲ghci进入交互模式

Code$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
Prelude> 
ghci>:q                       -- 退出

1. 简单的运算

ghci> 2 + 15 
17 
ghci> 49 * 100 
4900 
ghci> 1892 - 1472 
420 
ghci> 5 / 2 
2.5 

也可以在一行中使用多个运算子,他们会按照运算子优先级执行计算,而使用括号可以改变执行的优先级。

ghci> (50 * 100) - 4999 
1 
ghci> 50 * 100 - 4999 
1 
ghci> 50 * (100 - 4999) 
-244950
进行布尔代数 (Boolean Algebra) 的演算也是很直觉的。你也许早就会猜, && 指的是布尔代数上的 AND ,而 || 指的是布尔代数上的 OR not 会把 True 变成 False False 变成 True
ghci> True && False 
False 
ghci> True && True 
True 
ghci> False || True 
True 
ghci> not False 
True 
ghci> not (True && True) 
False 

ghci> 5 == 5 
True 
ghci> 1 == 0 
False 
ghci> 5 /= 5 
False 
ghci> 5 /= 4 
True 
ghci> "hello" == "hello" 
True 

2. 简单的函数

        打开编辑器,输入如下代码,它的功能就是将一个数字乘以 2
                                             haskell doubleMe x = x + x
函数的声明与它的调用形式大致相同,都是先函数名,后跟由空格分隔的参数表。但在声明中一定要在 = 后面定义函数的行为。
保存为 baby.hs 或任意名称,然后转至保存的位置,打开 ghci ,执行 :l baby.hs 。这样我们的函数就装载成功,可以调用了。
ghci> :l baby 
[1 of 1] Compiling Main ( baby.hs, interpreted ) 
Ok, modules loaded: Main. 


ghci> doubleMe 9 
18 
ghci> doubleMe 8.3 
16.6
        “+” 对整数和浮点都可用 ( 实际上所有有数字特征的值都可以 ) ,所以我们的函数可以处理一切数值。声明一个包含两个参数的函数如下:
                                        haskell doubleUs x y = x*2 + y*2
很简单。将其写成 doubleUs x y = x + x + y + y 也可以。
测试一下 ( 记住要保存为 baby.hs 并到 ghci 下边执行 :l baby.hs )
ghci> doubleUs 4 9 
26 

ghci> doubleUs 2.3 34.2 
73.0 

ghci> doubleUs 28 88 + doubleMe 123 
478
你可以在其他函数中调用你编写的函数,如此一来我们可以将 doubleUs 函数改为:
haskell doubleUs x y = doubleMe x + doubleMe y

3. Haskell的if语句

        Haskell 中 if 语句的 else 部分是不可省略。在命令式语言中,你可以通过 if 语句来跳过一段代码,而在 Haskell 中,每个函数和表达式都要返回一个结果。对于这点我觉得将 if 语句置于一行之中会更易理解。
        Haskell 中的if 语句的另一个特点就是它其实是个表达式,表达式就是返回一个值的一段代码: 5 是个表达式,它返回 5 4+8 是个表达式; x+y 也是个表达式,它返回 x+y 的结果。正由于 else 是强制的, if 语句一定会返回某个值,所以说 if 语句也是个表达式。
        如果要给刚刚定义的函数的结果都加上 1,可以如此修改:
doubleSmallNumber x = if x > 100 then x else x*2 + 1
注意在Haskell中首字母大写的函数是不允许的。 没有参数的函数通常被称作 定义 ”( 或者
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值