神奇的Haskell

Haskell 定义函数的时候可以指定一个类型,也可以只指定某一类类型(泛型编程)

定义普通函数

plus2 :: Int -> Int

plus2>

只能用Int型调用

定义泛型的函数

plus2 :: (Num a) a -> a

plus2>

这下子不只是Int型可以调用,还有float之类的只要是数字就都可以调用了

Haskell 函数调用过程,神的一B

在实际上,Haskell没有超过一个参数的函数。对于一个两个参数的函数,他是这样的:原函数A与第一个参数组合 返回一个可以调用一个参数的函数B,B 再调用第二个参数,依次做下去。

这样的好处在于,可以利用原来的函数方便的创造新函数

比如我有一个 “+”函数 我要定义一个 “+3” 函数 (只包含一个参数),就直接 (+3) 就定义好了。这个函数只包含一个参数,可以被其他函数传来传去。

另外还有一个小地方就是 定义函数类型的时候 "->"这个东西是右结合的,就是先算最右边的,所以定义函数的时候要加上括号


flip' :: (a -> b -> c) -> b -> a -> c   
flip'>


这个小函数作用是传入一个两个参数的函数,返回一个翻转这两个参数的函数。真是吓尿了。


haskell中的循环和递归

haskell中是没有循环的,一切都是用递归来实现,一开始的时候不习惯,总觉得循环是必须的,但是现在觉的haskell实在是太厉害了。

一切循环都可以通过递归来实现

haskell提供了几个函数,今天又学了一个fold函数,这个函数可以说是循环语句的杀手了。

fold的作用就是遍历一个list,对其中的元素一个一个的操作。

fold 的参数是一个两个参数的函数, 一个起始值 一个list。那个函数操作的两个变量,一个是list顶端的数,一个是累加数。这个函数经过计算后把这个累加值传递下去最后返回这个累加值。

想想那些个for语句不就是做的这件事么?


Haskell 的类型构造子与值构造子

Haskell 可以方便的使用data关键字构造新类型,新类型可以是由旧类型组合而成也可以构造泛型的类型

就是可以容纳多个类型,构造泛型的时候不准使用类型限制

data List>

这个List 有两个构造子,可以递归的构造List Empty 和 Cons 是List的两个不同构造子的名字 这个类型名字是List,需要传入一个类型才能使用


Haskell 中的Functor 与>

接受一个缺少一个参数的函数再返回缺少一个参数的函数,是不是特别帅。

这样来看,如果你在使用fmap的时候,最后不加参数,那么他就返回一个缺少一个参数的函数,这个函数可以按照你要的规则构造一个原类型的新值,你可以命名一下以后随便用啊哈哈。

不过这里这个f容易引起误会,按函数定义来,fmap中的f是个函数(a->b) ,Functor定义中的f 是个构造子OTZ。

这就叫函数升华?(function>

然后把这个AjNode 传入 一个链表中,就是一个点的邻接点了,设这个类型为V

然后再把V传入一个链表中,这个类型就是G,也就是图了

几个链表而已...


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值