邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
twitter
tg_channel

SICP-Lec1a.lisp概览

什么是程序#

程序是一个黑盒,输入东西然后输出你想要的。
在大系统中控制复杂度的技术是计算机技术的关键,计算机科学的复杂度不是 “现实的”,不受物理等因素影响,计算机科学处理的是理想化的组件, 在理想和现实中没有太大的不同,可以随心所欲的组合,构建,计算机工程就像随心所欲的不被约束的搭积木。抽象是计算机科学的重要思维。程序的黑盒可以使由无数个黑盒组成的(隐藏细节,黑盒抽象思维)。

什么是编程语言#

编程语言是实现黑盒的咒语,是指令。
通过基本指令构建复杂指令,基本数据构建复杂数据,用黑盒进行封装。这就是编程的过程。

控制复杂度#

控制复杂度的方式就是在程序里留下约定的接口,并想办法组合起来。面向对象思想和聚集思想(“流”)是主要的两种办法。

什么是 lisp#

了解一门语言主要在三点:
构成语言的基本元素?
如何组合这些元素?
抽象的方法是什么?

组合的方法#

3 + y 12.1

类似这种 “符号” 都是 lisp 里的抽象数据。

(+ 3 12 1.1)

这就是组合式 由运算符和运算对象组成(前缀表达法)。
实际上组合式也是 “树”

   +
 / | \
3 12 1.1

更多的树枝也同理

   +
 / | \
3 12 1.1
      |
      +
      | \
      1  0.1

我们可以理解成:程序就是在构建这些树。

抽象的方法#

(define (add a b) (+ a b))

定义一个名为 add 的函数,函数有两个值,返回这两个值的和。
当然也可以用 lambda 构建一个过程。

(define square
	(lambda (x) (* x x)))

这一切都是构建的过程。

(define (average x y)
	(/ (+ x y) 2))

(define (mean-square (x y)
	(average (square x)
		(square y))))

一个简单的均方求值器

分情况的构建

(define (abs x)
	(cond ((< x 0) (- x)
		(= x 0) (0)
		(> x 0) (x))))
;; OR
(define (abs x)
	(if (< x 0)
		(- x)
		X))
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。