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以后,对于递归有了从新的理解,本身调用本身并非递归
只有知足了层层递进,在层层回归,才叫作递归
尾递归(有递进没有回归)基本都是迭代