函数式编程LISP

React是抄袭了函数式,而LISP是函数式的正宗
因此我去看了SICP这本书,全名叫作<<计算机程序的构造和解释SICP>>
从而学习了Lisp,LISP是一种通用高级计算机程序语言, 它是做为因应人工智能而设计的语言,是第一个声明式系内函数式程序设计语言.
基本语法 :
   1. 加法运算语法: (+ a b):
      // a 加 b,转换成js,就是a + b
      例如: (+ 1 2) // 3
   
   2. 乘法运算: (* a b) 
      // a 乘 b,转换成js,就是a * b 
      例如: (* 2 3) // 6
      
   3. 命名: (define size 5) 
      // define 就是用来进行声明的特是字符 
      // 这里是声明一个变量size,变量的值是5 
      // 再次进行计算,5 乘 2,js表示就是5 * 2 
      例如: (* size 2) // 10
   
   4. 复合过程 (就像是声明一个函数): 
      // define 就是用来进行声明的特是字符 
      // 声明了一个add的函数,参数是a b,执行逻辑是a 加 b (define (add a b) (+ a b)) 
      例如: (add 1 2) // 3 
      // 声明了一个sq的函数,参数是a b,执行逻辑是a 乘 b (define (sq a b) (+ (* a a)(* b b))) 
      例如: (sq 1 2) // 5
   5. if(条件判断): 
      // 声明了一个abs函数,函数的参数是a 
      // 后面是执行逻辑,若是a大于0,返回值是a,不然返回值是-a 
      例如: (define (abs a) (if (> a 0) a (- a)))
      
递归 :
   // 用一个例子来作一个递归的函数,求6的阶乘(就是1\*2\*3\*4\*5\*6) 
   // 思考: 可能会是任意数,因此须要定义函数进行传参,从n开始,乘以n-1,当最后的值等于1,咱们就乘以1结束 
   // define声明一个fn的函数,参数是n
   (define (fn n) 
      // 若是n等于1,返回1,不然就是n乘n-1,可是n-1还可能不等于1,那就继续计算,再次调用fn,传入n-1 
      // n-1会成为fn的参数,进行下一步计算,直到n等于1,结束计算 
      (if (= n 1) 
           1 
           (* n (fn (- n 1))) 
      ) 
    )
    
迭代 :
   // 用一个例子来作一个迭代的函数,求6的阶乘(就是1\*2\*3\*4\*5\*6) // 迭代就是从1到n的一个正向操做 
   // fn对ft进行封装
   (define (fn n) 
     // 调用ft函数 
     (ft 1 1 n) 
    )
    // 定义ft执行逻辑(result n maxN三个参数)
    (define (ft result n maxN)
      // 若是 n大于maxN,返回result,不然继续ft,并改写了参数 
      (if (> n maxN) 
         result 
         (ft (* n result) (+ n 1) (maxN)) 
      ) 
    )
高阶函数: 
 在数学和计算机科学中,高阶函数是至少知足下列一个条件的函数 
    1. 接受一个或多个函数做为输入 
    2. 输出一个函数
总结:
学习了Lisp以后,对于递归有了从新的理解,本身调用本身并非递归 
   只有知足了层层递进,在层层回归,才叫作递归 
   尾递归(有递进没有回归)基本都是迭代
相关文章
相关标签/搜索