zoukankan      html  css  js  c++  java
  • 用高阶函数做抽象——《计算机程序的构造和解释》

      我们已经看到,在作用上,过程也就是一类抽象,它们描述了一些对于数的复合操作,但又并不依赖于特定的数。例如,在定义:

      (defined (cube x)(* x x x))

    时,我们讨论的并不是某个特定数值的立方,而是对任意的数到其立方的方法。当然,我们也完全可以不去定义这一过程,而总是写出下面这样的表达式:

      (* 3 3 3)

      (* x x x)

      (* y y y)

    并不明确的提出cube。但是,这样做将把自己置于一个非常糟糕的境地,迫使我们永远在语言恰好提供了的那些特定基本操作(例如这里的乘法)的层面上工作,而不能基于更高级的操作去工作。我们写出的程序也能计算立方,但是所用的语言却不能表述立方这一概念。人们对功能强大的程序设计语言有一个必然要求,就是能为公共的模式命名,建立抽象,而后直接在抽象的层次上工作。过程提供了这种能力,这也是为什么除最简单的程序语言外,其他语言都包含定义过程的机制的原因。

      作为编程者,我们应该对这类可能性保持高度敏感,设法从中识别出程序里的基本抽象,基于它们去进一步构造,并推广它们以创建威力更加强大的抽象。当然,这并不是说总应该采用尽可能抽象的方式去写程序,程序设计专家们知道如何根据工作中的情况,去选择合适的抽象层次。但是,能基于这种抽象去思考确实是最重要的,只有这样才能在新的上下文中去应用它们。高阶过程的重要性,就在于我们能显示的用程序设计语言的要素去描述这些抽象,使我们能像操作其他计算元素一样去操作它们。

  • 相关阅读:
    需学习
    CentOS中一些基本的操作记录
    允许IIS下载无后缀文件及“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”的解决方法
    sql server使用的注意点及优化点 自备
    kali 系列学习02
    kali 系列学习01
    运维自动化之13
    运维自动化之12
    运维自动化之11
    运维自动化之10
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5206552.html
Copyright © 2011-2022 走看看