Schemer遞歸

Schemer符號編程極簡語言:講解遞歸概念的最佳編程語言

如下儘量全是大白話,不是大白話請爸爸抽我。編程

1、各類符號介紹

atom原子:能夠是字母、單詞、數字、特殊字符及其餘組成的字符串(除了"()"符號)
list列表:用括號括起來的原子集合("()是一個列表,叫空列表,但空列表不包含列表,這句話困擾了我好久")
collection集合:去掉括號的列表
全部的原子和列表都是'S-表達式'
car(咔爾)基本元件:列表內第一個'S-表達式',表達式爲l = (a b c) (car l) = (a)
cdr(咔噠)基本元件:列表內除了咔爾外的其餘'S-表達式'的集合l = (a b c) (cdr l) = (b c)
Ps. l = (a) (car l) = (a) (cdr l) = ()爲空列表
cons基本元件:合併一個'S-表達式'到一個列表的第一位,表達式cons a (b xc) = (a b c)
null?基本元件:判斷一個列表是否爲空列表,表達式(null? x) ,x = (),結果爲True。(null?必須且只能判斷列表是否爲空)
atom?:判斷'S-表達式'是不是一個原子,表達式(atom? x),x = abc ,結果爲True。
eq?:判斷兩個非數字的原子是否相同,表達式(eq? a a),結果爲True。編程語言

2、嘗試初級遞歸^^

lat?:判斷列表中每一個'S-表達式'是否不包含列表,表達式(l = (a b)) (lat? l)結果爲True;(l = ()) (lat? l)結果爲True,由於l不包含列表
cond... 爲程序定義問題
lambda... 建立一個函數
define... 爲函數命名函數

咱們來個小例題:
l = (bacon and eggs) 求(lat? l)的結果爲?
(define lat?
  (lambda (l)
     (cond
       ((null? l) #t)
      ((atom? (carl))(lat? (cdr l)))
      (else #f)
)))

其結果最終爲#t,你算出來了嗎?

or... 詢問兩個及以上問題,有一個問題結果爲t,其最終結果即爲t。表達式a = (a b c) b = () (or (null? a) (null? b)),結果爲t。
member?:確認第一個值是否被第二個值包含。表達式(a = x) (b = (x y z)) (memaber? a b) ,結果爲t。atom

全文引用《The Little Schemer》做者:Daniel P. Friedman 、 Matthias Felleisencode

相關文章
相關標籤/搜索