Luckyscript's Blog
  • 浅谈函数式编程

    这是来百度后的新人技术分享,这是个大体的提纲,分析的比较简单,因为我觉得自己对FP也存在一知半解。

    什么是函数式编程(What?)

    函数式编程中的函数这个术语不是指计算机中的函数(实际上是子程序),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。

    特点(fectures)

    函数是一等公民(first-class),可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。

    纯函数( Pure Fun

  • 后续传递(continuation)和回调(callback)的差别

    前言

    在绝大多数的编程语言中,函数通常返回值给调用它的对象。举个例子:

    var sum = add(2, 3);
    console.log(sum);
    function add(x, y) {
        return x + y;
    }

    然而,在现在很多的“函数是一等公民”的语言(函数式编程语言)中,我们也可以把值返回给回调函数,而不是直接返回给调用的那个对象。

    ``` add(2, 3, function (sum) { console.log(sum); }); function add(x, y, cont) { cont(x + y); } ``

  • 浅谈尾递归

    第一次接触尾递归(Tail recursion)是在读《SICP》这本书上。第二次是面试的时候,被面试官问到了。

    递归

    (define (Fibonacci x)
      (cond (= x 1) 1
        (= x 2) 2
            (else 
                  (+ (Fibonacci (- x 2) (Fibonacci (- x 1))))))

    这是个简单的斐波那契函数,函数的作用就是算出对应的斐波那契值。我们很容易想到,Fibonacci x