Haskell1

((f x) g) y
f :: A ->(B->C)
x :: A

f x :: B->C
y :: B->C

take n是取列表的前n项
drop n 是取列表去掉前n项后剩下的项

[] , ->, 元组 是类型运算

[Char]->[Char]->Bool <==> [Char]->([Char] ->Bool)

无名变量’_’, 如定义列表长度函数:
myLength :: [Int] -> Int
myLength [] = 0
myLength (x:xs) = 1 + length xs
也可用无名变量’_’:
myLength :: [Int] -> Int
myLength [] = 0
myLength (_:xs) = 1 + length xs
因为原来使用’x’的变量在右边不出现,用什么名都没关系

myMax x y = if x > y then x else y
也可写成: (注意等号写在每个条件后面)
myMax x y
| x > y = x
| otherwise = y

判断整数是否在列表中
myElem :: Int -> [Int] -> Bool
myElem x [] = False
myElem x (y : ys) = if (x==y) then True else myElem x ys
等价于myElem x (y :ys)
|x==y = True
|otherwise = myElem x ys
也可以写成
myElem x (y :ys) = (x==y) || myElem x ys

判断任意类型 特别注意,a应该支持==判断,故此处应有类型约束
myElem :: (Eq a)=>a -> [a] -> Bool (函数)重载,即让一个函数做不同的事情
myElem x [] = False
myElem x (y :ys)
|x==y = True
|otherwise = myElem x ys

图书馆借书程序
type Person = String
type Book = String
type DataBase = [(Book,Person)]
makeLoan :: DataBase -> Person -> Book -> DataBase
makeLoan db person book = (book,person) : db
–db ++ [(book,person )]

还书程序
returnLoan :: DataBase -> Person -> Book -> DataBase
returnLoan db person book = [ pair | pair <- db, pair /=(book , person)]
上面可用于列表删除

exampleDB :: DataBase
exampleDB = [(“C++”,”Wang”),(“Java”,”Trump”),(“Python”,”Gates”)]
newDB = makeLoan exampleDB “Gao Min” “Programming in Java”
newDB2 = returnLoan newDB “Wang” “C++”

books :: Person -> DataBase ->[Book]
books person db = [ b | (b,p) <-db ,p == person ]

搜索网站Hoogle,书real world haskell

乘方操作符(^)是对于整数的。如果要用浮点数作为指数,则需要操作符(**)

函数fromInteger :: Integer ->a 可以将一个类型为Int的数转为a类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值