邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
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))
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。