• Scala 函数式程序设计原理(1)


    课程地址:https://www.coursera.org/learn/progfun1/home/welcome

    1.1 Programming Paradigms

    • In a restricted sense, a functional programming language is one which does not have mutable variables, or imperative control structures.
    • In a wider sense, a functional programming language enables the construction of elegant programs that focus on functions.
    • In particular, functions in a FP language are first-class citizens. This meas
      • they can be defined anywhere, including inside other functions
      • like any other value, they can be passed as parameters to functions and returned as results
      • as for other values, there exists a set of operators to compose functions

    1.2 Elements of Programming

    Evaluation of Function Applications:

    1. Evaluate all function arguments, from left to right
    2. Replace the function application by the function's right-hand side, and, at the same time
    3. Replace the formal parameters of the function by the actual arguments

    Example:

    sumOfSquares(3, 2+2)          sumOfSquares(3, 2+2)

    sumOfSquares(3, 4)            square(3) + square(2+2)

    square(3) + sqaure(4)           3 * 3 + (2+2) * (2+2)

    3 * 3 + sqaure(4)              9 + (2+2) * (2+2)

    9 + sqaure(4)                9 + 4 * (2+2)

    9 + 4 * 4                 9 + 4 * 4

    9 + 16                   9 + 16

    25                      25

    call-by-value               call-by-name

    1.3 Evaluation Strategies and Termination

    def first(x: Int, y: Int) = x
    first(1, loop)

    CBN: 1

    CBV: first(1, loop) => first(1, loop) => ...

    in scala, using CBV: more efficiency && less side effect

    => pass call by name

    1.4 Conditions and Value Definations

    def: call by name

    val: call by value

    def loop: Boolean = {
        if(loop) loop else false
    }
    def a = loop  //loop
    val b = loop  //no result, because in val, it will calculate value of function loop first

    1.6 Blocks and Lexical Scope

    block is delimited by braces { ... }, it contains a sequence of definitions or expressions

    1.7 Tail Recursion

    In general, if the last action of a function consists of calling a function (which may be the same), one stack frame would be sufficient for both functions. Such calls are called tail-calls.

  • 相关阅读:
    Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效
    Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
    Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果
    各产品编译及串口烧录
    C 语言代码规范
    烧录
    共享目录
    openwrt Makefile
    netfilter 参考pywj的《netfilter + nf_conntrack + iptables》
    iptables问题
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6846641.html
Copyright © 2020-2023  润新知