1. 程式人生 > >SICP讀到第二章時對Scheme的理解

SICP讀到第二章時對Scheme的理解

在Scheme中,

一個括號裡包含了一個基本單元。

括號裡可以包含基本的資料,或者由別的括號圍起來的的基本單元。

比如 ( + 1 2 ),它有兩種意義:第一種,它代表了1+2這個運算過程,第二種,它代表了整數3.

再比如 ( define x 1 ),有兩種意義:第一種,它代表了“將x的值設定成1”這個運算過程。

第二種意義,它返回一個東西,這個東西是值還是過程我也不知道(誤

但總之,( define 1 )代表了一個值或者過程。

在Scheme中,值和過程分的並不是那麼清楚,這是最令我驚奇和著迷的地方。

一個過程也可以作為返回值,返回給其它的過程作為一個引數來使用。

這句話可能有點抽象。但其實在C語言中有類似的概念,那就是函式指標。

在C語言中,函式指標指向了函式的起始地址,也就是函式的入口。這個指標是一個十六進位制整數值,

但是這個整數又指向了一個函式,所以它又可以被看做一個函式。

所以C語言中,使用函式指標,可以達到Scheme中的,“把過程作為引數傳進去”、“把過程作為引數傳出來” 這兩個目的。

所以這就是函數語言程式設計了對嗎?

下面討論一下scheme的括號的意義

一對括號就代表了一個值,這個值可以是常規意義上的值,也可以是過程,也可以是空的:()

括號裡的東西由兩種元素組成:資料和對資料的操作。

第一項是對資料的操作,後面的都是資料。

但是,資料和操作分的並不是那麼清楚。

所以操作也可以被操作所操作(我覺得這句話會燒掉讀者的大腦)

比如

(define * 2)
(+ * * * *)

這麼做會輸出8,因為你把乘號定義成了2,這個例子雖然有些匪夷所思,但是可以說明,scheme語言的靈活性。

就像SICP第一章所說的:

”Lisp不像其它程式設計語言,它給了過程完全的第一級狀態。這就給有效實現提出了挑戰,但由此所獲得的描述能力卻是極其驚人的。“

相關推薦

SICP第二Scheme理解

在Scheme中, 一個括號裡包含了一個基本單元。 括號裡可以包含基本的資料,或者由別的括號圍起來的的基本單元。 比如 ( + 1 2 ),它有兩種意義:第一種,它代表了1+2這個運算過程,第二種,它代表了整數3. 再比如 ( define x 1 ),有兩種意義:

怎樣找還有一半---第二象 什麽能讓你放心

track 第二章 帶來 處理 洞察力 載體 統帥 have 危機 第二章 找對象 什麽能讓你放心 第一節 司馬光的“才德理念” 才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝得謂之小人 -------司馬光

《JAVA多線程編程核心技術》 筆記:第二象及變量的並發訪問

問題 內部類 nds safety string line 基本概念 子類 標記 一、基本概念1、安全的變量和不安全的變量2、臟讀的理解3、鎖重入:4、鎖釋放5、死循環:二、synchronized 的理解:三、synchronized 同步方法3.1 同步方法不具有繼承

redis開發與運維第二總結-API的理解和使用

1.redis提供5種資料結構,每種資料結構都有多種內部編碼實現。 2.Redis高效能的三個因素:純記憶體儲存,IO多路複用技術,單執行緒架構 3.由於Redis的單執行緒架構,所以需要每個命令能被快速速速執行完,否則會存在阻塞Redis的可能,理解Redis單執行緒命令處理機制是開發和運

第二.理解面向

之間 重用 相同 執行 如何 ati 一切都 第二章 活動 面向對象語言的三個基本特征:封裝(Encapsulation)、繼承(Inheritance)、多態(Polymorphism) 封裝:將對象的實現細節隱藏起來,然後通過一些公用方法來暴露該對象的功能 繼承:實現軟

《深入理解JVM兩遍》總結(純手打) 第二 Java記憶體區域

深入理解JVM總結 第二章 Java記憶體區域 2.2 執行時資料區域 2.2.1 程式計數器 可以看作當前執行緒所執行的位元組碼行號指示器。 位元組碼直譯器工作時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令。 每一個執行緒都需要有一個獨立的程式計數

Thinking in Java(第四版)—— 第二 一切皆

ati 靜態 數據類型 thinking short str 變量 屬於 字符 一.對象保存的位置 寄存器(cpu) 棧(變量) 堆(對象) 靜態域(static) 常量池(string) 非內存區池 二.基本數據類型 整數型 byte short int

『Java編程思想-第四版』第二:一切都是

ack 運行時錯誤 存儲 數據類型 自身 創建 引用 all 外觀 Java編程思想-第四版學習總結,此為第二章:一切都是對象. package com.w3cjava.second; @SuppressWarnings("all") pu

面向第二

實現繼承 類對象 調用 訪問 erl 派生 提取 bject 提高 一、 繼承的優點 優點:提高代碼的可重用性 1、 如何判斷A、B類之間是繼承關系? 符合 is…a關系 2、java中,所有的類都直接或間接的繼承了java.lang.Object類 3、 ja

Java第二----象和類

lang 權限 app 讀取 -o 通用 返回值 完全 靜態 從第一章到第二章整整隔了一個月的時間,這速度也是慢的無語了。因為這個月負責開發公司一個SaaS類型APP,忙的昏天暗地終於上線了,這才有時間寫個博客。本章還是以概念為主,有點枯燥重在理解。 第一節:對

深入理解Linux內核 - 第二 內存尋址 01

lin linu 地址 什麽 邏輯地址 問題 理解 整數 深入 1,三個地址 邏輯地址,機器語言指令中用來指定一個操作數或一條指令的地址。 線性地址:32位無符號整數,高達4GB。64位的cpu就是64位的線性地址 物理地址:內存芯片級內存單元尋址。老式x86由32位或36

使用java實現面向第二

nds str 進行 數列 是否 wid 繼承關系 類的構造函數 局部變量 第二章 繼承 一、使用繼承 繼承是面向對象的三大特特之一,Java只支持單繼承。繼承表達 is a 的關系。 在Java中,所有的Java類都直接或間接的地繼承了Java.lang.object類,

<Thinking in java 第二> 一切都是

運算 參數 區分 bigint 高精度 簽名 重載 對象 通過 P23——Java提供了兩個用於高精度計算的類:BIgInteger和BigDecimal,能作用於int和float的操作,也同樣能作用於BigInteger和BigDecimal。只不過必須以方法調用的方式

第二(連續時間系統的域分析之二)

image 狀態 技術分享 得出 滿足 激勵 方程 alt 學習   零輸入響應和零狀態響應   這名字取得有點怪,其實零輸入響應即是狀態響應,而零狀態響應就是輸入響應。   零狀態響應:不考慮起始時刻系統儲能的作用(起始組狀態為0),由系統的外加激勵信號所產生的響應   

第二 運行的頁面構建過程

src 技術 str 技術分享 修改 步驟 png 繼續 事件監聽器 1、客戶端 Web 應用的生命周期 客戶端 Web 應用的生命周期從用戶指定某個網站地址(或單擊某個鏈接)開始 其由兩個步驟組成:頁面構建和事件處理   頁面構建 —— 創建用戶界面   事件處理 —

Python算法教程第二知識點:計時模塊、字典與散哈希表、圖與樹的實現、成員查詢、插入

復雜度 代碼段 程序 ans 數列 imp val 插入對象 string 本文目錄:一、計時模塊;二、字典與散哈希表;三、圖與樹的實現;四、成員查詢;五、插入對象</br>一、計時模塊(timeit、cProfile) import timeit timeit

ThinkingInJava第二一切都是

數據 bool 問題 多個 高精度數 gin 來源 cte hello Java來源於C++。Java中兩種數據類型:基本數據類型和引用數據類型。 存儲:寄存器,堆棧,堆,常量存儲,非RAM存儲。 基本類型:boolean,byte,char,short,int,long,

第二 - 一切都是

返回值 編碼風格 默認值 6.2 必須 一切都 方法 初始化 port 2.1 用引用操作對象 2.2 必須由你創建所有對象 2.2.1 存儲到了什麽地方 當通過new的方式創建對象,會在堆上分配相應的內存空間,通過變量引用分配的對象。  2.2.2 特例:基本類型 對於一

2018-2019-1 20189206 《深入理解計算機系統》第二學習筆記

2018-2019-1 20189206 《深入理解計算機系統》第五週學習總結 教材學習內容總結 本章主要研究三種重要的數字表示,分別是無符號編碼、補碼編碼和浮點數編碼。其中,無符號編碼表示大於或等於零的數字,補碼編碼用來表示有符號整數,浮點數編碼是科學計數法的以2為基數的版本。 第二章 資訊的表示和處

2018-2019-1 20189215 《深入理解計算機系統》第二學習總結

《第2章 資訊的表示和處理》 研究三種最重要的數字表示:無符號編碼、補碼編碼、浮點數編碼。 教材學習內容總結 2.1 資訊儲存 大多數計算機使用的8位的塊,或者位元組(byte)作為最小的可定址的儲存器單位,而不是儲存器中訪問單獨的位。機器級程式將儲存器視為一個非常大的位元組陣列,稱為虛擬