Less is More
  • image

    Haskell

    06-higher order functions

    高阶函数 [$img/sun.png] haskell中的函数可以作为参数和返回值传来传去,这样的函数就被称作高阶函数。高阶函数可不只是某简单特性而已,它贯穿于haskell的方方面面。要拒绝循环与状态的改变而通过定义问题"是什么"来解决问题,高阶函数必不可少。它们是编码的得力工具。 柯里函数 本质上,haskell…

  • image

    Haskell

    05-recursion

    递归 你好,递归! [$img/recursion.png] 前面的章节中我们简要谈了一下递归。而在本章,我们会深入地了解到它为何在haskell中是如此重要,能够以递归思想写出简洁优雅的代码。 如果你还不明白什么是递归,就读这个句子。哈哈!玩笑而已!递归实际上是定义函数以调用自身的方式。在数学定义中,递归随处可见,如斐波那契数列(fibonacci)。它先是定义两个非递归的数:F(0)=0,F(1)=1,表示斐波那契数列的前两个数为0和…

  • image

    Haskell

    04-syntax in functions

    函数的语法 模式匹配 [$img/pattern.png] 本章讲的就是haskell那套酷酷的语法结构,先从模式匹配开始。模式匹配通过检查数据的特定结构来检查其是否匹配,并按模式从中取得数据。 在定义函数时,你可以为不同的模式分别定义函数体,这就让代码更加简洁易读。你可以匹配一切数据类型---数字,字符,List,元组,等等。我们弄个简单函数,让它检查我们传给它的数字是不是7。 在调用时,模式会从上至下进行检查,一旦有匹配,那对应的函数体就被应用了。这个模式中的唯一匹配是参数为7,如果不是…

  • image

    Haskell

    03-types and type classes

    types-and-type-classes 相信类型 [^img/cow.png] 在前面我们谈到Haskell是静态类型的,在编译时每个表达式的类型都已明确,这就提高了代码的安全性。若代码中让布尔值与数字相除,就不会通过编译。这样的好处就是与其让程序在运行时崩溃,不如在编译时捕获可能的错误。Haskell中万物皆有类型,因此在执行编译之时编译器可以大有所为。 与Java和Pascal不同,haskell支持类型推导。写下一个数字,你就没必要另告诉haskell…

  • image

    Haskell

    02-ready begin

    ready-begin 各就各位,预备! [$img/startingout.png] 好的,出发!如果你属于那种从不看说明书的不良人士,我推荐你还是回头看一下简介的最后一节。那里面讲了这个教程中你需要用到的工具及基本用法。我们首先要做的就是进入ghc的交互模式,接着就可以调几个函数小体验一把Haskell了。打开控制台,输入ghci,可以看到如下欢迎信息: 恭喜,你已经进入了ghci…

  • image

    Haskell

    01-introduction

    简介 关于这个教程 欢迎来到haskell趣学指南!阅读此文表明你正要学haskell。很好,来对地方了,先容我简单介绍一下这个教程。 编写这个教程,一方面是为了巩固我自己对haskell的理解,另一方面也是希望能够分享我的经验,给初学者提供一定帮助。网上现有的haskell…

  • image

    OS

    shell intro

    Shell VS GUI 如今的计算机有着多种多样的交互接口让我们可以进行指令的的输入,从炫酷的图像用户界面(graphical user interface,GUI),语音输入甚至是 AR/VR 都已经无处不在。 这些交互接口可以覆盖 80% 的使用场景,但是它们也从根本上限制了您的操作方式——你不能点击一个不存在的按钮或者是用语音输入一个还没有被录入的指令。 为了充分利用计算机的能力,我们不得不回到最根本的方式,使用文字接口:Shell shell…

  • image

    React

    React Hooks 原理及实现

    React Hooks 主要用来解决两个问题, 组件之间复用逻辑 社区中普遍采用的 High-Order-Components和render props,然而这两种方案分别会带来 “wrapper hell” 和代码难以理解/维护的问题。 wrapper hell…