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之后,对于递归有了重新的理解,自己调用自己并不是递归 只有满足了层层递进,在层层回归,才叫做递归 尾递归(有递进没有回归)基本都是迭代