美文网首页
函数式编程语言

函数式编程语言

作者: sweetBoy_9126 | 来源:发表于2019-10-16 16:01 被阅读0次

Lisp基本语法

表达式(算术运算表达式)

> (+ 1 2)
< 3
> (+ 1 2 3 4)
< 10
> (+ (* 3 3) (* 4 4))
< 25

较长的表达式(组合表达式)

(+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))

(+ (* 3
        (+ (* 2 4) 
            (+ 3 5)))
    (+ (- 10 7) 
        6))  //57

命名(也叫定义,不叫赋值)

< (define size 5)
> 
< (* size 2)
> 10

复合过程(函数定义)

< (define (add a b) (+ a b))
< (add 1 2)
> 3
< (define (square x) (* x x))
< (square 4)
> 16
递归求值

求值规则

  1. 求各子表达式的值(右值)
  2. 将所有右值应用到运算符上就得最终结果
(* (+ 2 (* 4 6))
    (+ 3 5 7))
递归

一层一层的往下调用自己
场景:我们要实现一个1到6的阶乘,也就是65432*1
通过Lisp的写法

(define (factorial n)
    (if (= n 1)
        1
        (* n (factorial (- n 1)))))

定义一个factorial函数,参数为n,如果n等于1就返回1,否则就返回n*factorial(n-1)
也就是下面的

(factorial 6)
(* 6 (factorial 5))
(* 6 (* 5 (factorial 4)))
(* 6 (* 5 (* 4 (factorial 3))))
(* 6 (* 5 (* 4 (* 3 (factorial 2)))))
(* 6 (* 5 (* 4 (* 3 (* 2 (factorial 1))))))
(* 6 (* 5 (* 4 (* 3 (* 2 1)))))
(* 6 (* 5 (* 4 (* 3 2))))
(* 6 (* 5 (* 4 6)))
(* 6 (* 5 24))
(* 6 120)
720)
迭代
(factorial 6)
(fact-iter   1 1 6)
(fact-iter   1 2 6)
(fact-iter   2 3 6)
(fact-iter   6 4 6)
(fact-iter  24 5 6)
(fact-iter 120 6 6)
(fact-iter 720 7 6)
720
(define (factorial n)
    (fact-iter 1 1 n))
(define (fact-iter result n n-max)
    (if (> n max-n)
        result
        (fact-iter (* n result)
                    (+ n 1)
                    max-n)))

对比递归和迭代:
递归:先递进(展开),再回归(求值)。
迭代:从一个状态到下一个状态(有多个变量表示状态,每次更新这几个变量)。

相关文章

  • 函数式编程思维在三行代码情书中的应用

    函数式编程概述 如今主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面...

  • 函数式编程思维在三行代码情书中的应用

    函数式编程概述 如今主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面...

  • Python函数式编程

    虽然 Python 不是函数式编程语言(是命令式编程语言),但是支持许多有价值的函数式编程工具。Python 提供...

  • 函数式编程速记

    函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,...

  • 深入浅出Rxjs笔记 一

    一.函数式编程 函数式编程要求: 声明式 纯函数 数据不可变js 不算纯粹意义上的函数式编程语言,但是,在js中函...

  • 【Scala】Scala函数式编程初探

    函数式编程 函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda...

  • Scala学习笔记(5)-函数式编程

    Scala是一种函数式编程语言,它具有函数式编程范式的诸多特点。需要说明的是,scala并不是一种纯函数式编程语言...

  • Python函数式编程

    函数式编程 函数式编程就是一种给抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个 函...

  • Swift特性

    Swift是面向对象还是函数式的编程语言 Swift 既是面向对象的,又是函数式的编程语言。说 Swift 是面向...

  • GO学习笔记(12)-斐波那契数列与函数编程

    目录 函数指针 vs 函数式编程 闭包 斐波那契数列与函数接口 函数指针 vs 函数式编程 函数是go语言中的...

网友评论

      本文标题:函数式编程语言

      本文链接:https://www.haomeiwen.com/subject/bkdumctx.html