Schemer符號編程極簡語言:講解遞回概念的最佳編程語言
以下盡可能全是大白話,不是大白話請爸爸抽我,
一、各種符號介紹
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,
二、嘗試初級遞回^^
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,
cons構筑恢弘(這狗屁作者在說什么?請原諒我暫時無法理解這個題目)
rember:將一個串列內第一個此原子剔除,如果沒有此原子則串列不變,運算式a = (x) b = (z y x q s x z) (rember a b) = (z y q s x z),
全文參考《The Little Schemer》作者:Daniel P. Friedman 、 Matthias Felleisen
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/270765.html
標籤:其他
上一篇:騰訊筆試題20210321
下一篇:演算法 等概率問題
