個人網(wǎng)站如何做專業(yè)的營銷團隊哪里找
參考文章:
The Little Schemer 閱讀筆記-CSDN博客
前言
原子是Scheme的基本元素之一。首先定義了過程atom?
,用來判斷一個S-表達式是不是原子:
(define atom?(lambda (x)(and (not (pair? x)) (not (null? x)))))
這個“pair”實際上就是list.
但是需要注意,pair和list是兩碼事。pair在表達上是諸如'(1 . 2)
這樣用點分隔開的二元組。
第一章
S-表達式包括①原子atom;②列表list。
car取非空列表的第一個S-表達式。
cdr取非空列表list的 除(car list)
的剩余所有元素 組成的?列表。
cons將某個S-表達式 添加到 某個列表的開頭。
null??判斷S-表達式是否是空列表。
eq??判斷兩個S-表達式是否相同。
list的默認解析方式是:以car為函數(shù)名,以cdr為參數(shù)列表對函數(shù)進行調(diào)用,整個list的evaluated的結果就是函數(shù)的返回值。某些“關鍵字”作為car時,求值規(guī)則會發(fā)生變化,這個要具體問題具體分析。這個問題可以參考SICP的練習1.6。(“關鍵字”很少,并不復雜)
quote?或者?'?用來抑制對S-表達式的求值。由于S-表達式是遞歸結構,因此被抑制求值的S-表達式的各個子表達式都不會被求值。被quote的部分是作為“數(shù)據(jù)”的代碼。quoted原子的結果是它本身,類似于C系語言的enum;quoted數(shù)字原子的結果仍然是數(shù)字;quoted list的結果就是不求值的列表,類似于鏈表這樣的結構。
第二章? 處理,處理,反復處理
本章從lat?
函數(shù)的實現(xiàn)出發(fā),探討遞歸處理lat的基本思想和方法。
定義過程lat?
,用來判斷表的子表達式是否都是原子,即判斷l(xiāng)ist是不是lat(list of atoms)。第五章之前,涉及到的列表基本上都是lat。
(define lat?(lambda (list)(cond ((null? list) #t)((atom? (car list)) (lat? (cdr list)))(else #f)))`
特殊形式cond
是惰性的,也就是說,如果某個子句的謂詞為真,則不再檢查下面的子句。
定義過程member?
,用來判斷某個原子是否為某個lat的成員。這個函數(shù)很重要,尤其是對于實現(xiàn)集合的第七章。
(define member?(lambda (x lat)(cond ((null? lat) #f) ;找遍列表也沒找到((eq? x (car lat)) #t)(else (member? x (cdr lat))))))
第三章
直接看參考文章吧,總結的很到位了