• Atitit 理解Monad attilax总结Atiti


    Atitit 理解Monad attilax总结

     

     

    但函数式编程最大的一个问题是,函数是一个数学抽象,在现实世界中不存在,1

    那既然这样就够用了,还要 Monad 干嘛?Monad 的作用在这里就体现出来了,它就是个加强的胶水函数1

     

     

    但函数式编程最大的一个问题是,函数是一个数学抽象,在现实世界中不存在,

    它必须被模拟出来。目前为止被广泛使用的计算机还是基于图灵机模型,计算机的寄存器、缓存、内存就是用来记录状态的。要真正懂得程序设计,必须知道没有状态的函数是如何在充满状态的计算机上实现的,所以还是绕不开非函数式的编程。另外绝大部分的函数式程序设计语言都不是纯函数式的,出于实用性考虑都夹杂着其他语言的一些特点,并没有完全排斥状态。Haskell 号称纯函数式语言,用 Monad 来抽象状态,理论上可以自圆其说,但在实际使用中其实还是带来了很多不便(于是又发明了 Monad Transformer...)。

    从某种程度上说,状态是绕不过去的,毕竟人感知到的宏观世界就是由各种各样有各自状态的对象构成。函数式编程可以帮我们避免很多用其他方式容易犯的错误,在很多情况下写出更高质量的程序,但并发带来的复杂度并不会从根本上消失。各种编程风格一定是互相影响推动程序设计语言的进化,没有绝对的好坏,从 C++ 和 Java 最新标准里引入的函数式方面的功能就很容易看出这一点。比较有意思的是,OOP 最早是在 LISP 里实现的,而 LISP 也被很多人看做函数式编程的起始。同样,好的程序员也会根据具体情况使用合适的编程风格。

    那既然这样就够用了,还要 Monad 干嘛?Monad 的作用在这里就体现出来了,它就是个加强的胶水函数



    因为不方便。函数式编程的精髓就在于,我们可以用好多好多小小函数,搭搭搭,组成一个个大函数,最终写出整个程序来。如果所有 IO 都要用上面的模型,我们就要把程序里所有需要 IO 的地方都汇总起来,输入做成一个大数据结构,输出做成一个大数据结构,然后再往模型上面凑,很麻烦,这不精髓。

    理想的情况是这样:
    比如我们想写一个函数

    a -> c

    然后手头有两个小函数:

    a -> b

    b -> c

    于是我们用一个胶水函数

    (a -> b) -> (b -> c) -> (a -> c)

    把那两个小函数胶起来,做成我们要的

    a -> c

    这样是坠好的。

    Monad 的作用在这里就体现出来了,它就是个加强的胶水函数。IO Monad 是这些胶水之一,有了它,我们不但可以把小函数胶起来,还能在胶的同时,把他们的头连成一个输入流,把它们的尾巴连成一个输出流,构成最终的 IO 函数,不用吭哧吭哧自己构造 IO 数据结构。



    所以,Monad 胶水除了把两个小函数头尾相接拼起来以外,还可以趁机做些别的事情,起到封装一部分操作的作用。不同的胶水作用不同,所以要用不同的类(IO、Maybe 等等)把这些胶水区分开来。然后,

    图解 Monad - 阮一峰的网络日志.html

     

    作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    简称 Attilax Akbar 阿提拉克斯 阿克巴

    全名:Attilax bin Mahmud bin  attila bin Solomon Akbar Al Rapanui 

    阿提拉克斯  马哈茂德  阿提拉 所罗门 阿克巴 阿尔 拉帕努伊   

    常用名艾提拉(艾龙)   EMAIL:1466519819@qq.com

    转载请注明来源:attilax的专栏   http://blog.csdn.net/attilax

    --Atiend

     

  • 相关阅读:
    Wide & Deep Learning for Recommender Systems
    两个经典问题
    Vlog简介
    中文dumps显示
    用Python提取中文关键词
    【STL】算法 — partial_sort
    c字符串分割 strtok()
    JSP的声明(statement)
    layui之ajax巨坑
    jQuery 库中的 $() 是什么?(答案如下)
  • 原文地址:https://www.cnblogs.com/attilax/p/15198230.html
Copyright © 2020-2023  润新知