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