初學lisp

先貼張圖膜拜一下


John McCarthy

1958年,John McCarthy設計了Lisp,半個世紀過去了苛蒲,而今最新潮的語言也只是實現(xiàn)了lisp的設想。雖然流行程度不是很高绿满,但對Lisp的評價卻是頗高臂外。lisp究竟是一門什么樣的編程語言?

Lisp名稱源自列表處理(LISt Processing)的英語縮寫喇颁,是基于λ演算所創(chuàng)造的漏健。McCarthy的本意并不是要設計一門編程語言,而是要做一種理論演算橘霎,用更簡潔的方式定義圖靈機蔫浆。

Lisp在設計之初就有過人之處:

  • 條件結構(即"if-then-else"結構)。現(xiàn)在大家都覺得這是理所當然的姐叁,但是Fortran I就沒有這個結構瓦盛,它只有基于底層機器指令的goto結構洗显。
  • 函數(shù)也是一種數(shù)據(jù)類型。在Lisp語言中原环,函數(shù)與整數(shù)或字符串一樣挠唆,也屬于數(shù)據(jù)類型的一種。它有自己的字面表示形式(literal representation)嘱吗,能夠儲存在變量中玄组,也能當作參數(shù)傳遞。一種數(shù)據(jù)類型應該有的功能谒麦,它都有俄讹。
  • 遞歸。Lisp是第一種支持遞歸函數(shù)的高級語言绕德。
  • 變量的動態(tài)類型患膛。在Lisp語言中,所有變量實際上都是指針迁匠,所指向的值有類型之分剩瓶,而變量本身沒有。復制變量就相當于復制指針城丧,而不是復制它們指向的數(shù)據(jù)延曙。
  • 垃圾回收機制。
  • 程序由表達式(expression)組成亡哄。Lisp程序是一些表達式區(qū)塊的集合枝缔,每個表達式都返回一個值。這與Fortran和大多數(shù)后來的語言都截然不同蚊惯,它們的程序由表達式和語句(statement)組成愿卸。ruby就采用了這種機制
  • ...

《黑客與畫家》內(nèi)有一段:“至于Ruby,如果回到1975年截型,你聲稱它是一種Lisp方言趴荸,沒有人會反對”。作為一個ruby程序員宦焦,應該對Lisp有所了解发钝。

Lisp的語法很簡潔,幾乎就是他的名字-表處理波闹,程序代碼與數(shù)據(jù)的形式完全相同酝豪,以圓括號為邊界的表。插一個笑話:說蘇聯(lián)和美國太空競賽的時候精堕,克格勃費勁千辛萬苦孵淘,從NASA偷了一頁的源代碼,拿回去一看歹篓,好嘛瘫证,是Lisp代碼的最后一頁揉阎,滿紙都是 “)”。

閑話少說痛悯,下面來一些干貨余黎,介紹一下lisp的語法:

1 表達式

如上所說重窟,Lisp的表達式其實就是“表”

123 ;值是表達式
(+ 3 2)  ;操作符在前载萌,后邊參數(shù)以空格隔開
(+ 3
      (* 10 12)) ;組合式 3+ (10 * 12)

2 命名

以Scheme(Lisp方言,下同)為例
(define size 2)巡扇,定義變量size并賦值2

3 定義過程

過程定義形式一般如下:
(define (<名字> <參數(shù)(可多個)>) (<實現(xiàn)>))
例如(define (square x) (* x x))就定義了square過程,可以求平方(square 3)會得到9

4 條件表達式

條件表達式的一般過程如下
求x絕對值為例

(cond ((> x 0) x)
           ((= x 0) 0)
           ((< x 0 ) (- x)))
;也可以這樣
(cond ((< x 0) (- x))
            (else x))
;還可以這樣
(if (< x 0) 
     (- x)
     x)

邏輯復合運算符 and or not
(and (> x 0) (< y 0))
(or (> x 0) (< y 0))

了解了以上知識扭仁,下面我們來個稍微復雜點的練習,用牛頓迭代法求平方根

;先定義判斷已求的平方根是不是已夠精確
(define (good-enough? guess x)
              (< (abs (- x (square guess))) 0.001))
;定義無限逼近的方法
(define (average x y) 
              (/ (+ x y) 2))
;定義改進方法
(define (improve guess x)
              (average guess (/ x guess)))
;定義求平方根遞歸
(define (sqrt-item guess x)
              (if (good-enough? guess x)
                    guess
                    (sqrt-item (improve guess x)
                                        x)))
;定義求平方根方法
(define (sqrt x)
              (sqrt-item (/ (* 1.0 x) 2)
                                  x))

效果如下:


Paste_Image.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厅翔,一起剝皮案震驚了整個濱河市乖坠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刀闷,老刑警劉巖熊泵,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甸昏,居然都是意外死亡顽分,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門施蜜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卒蘸,“玉大人,你說我怎么就攤上這事翻默「孜郑” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵修械,是天一觀的道長趾牧。 經(jīng)常有香客問我,道長肯污,這世上最難降的妖魔是什么翘单? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮仇箱,結果婚禮上县恕,老公的妹妹穿的比我還像新娘。我一直安慰自己剂桥,他們只是感情好忠烛,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著权逗,像睡著了一般美尸。 火紅的嫁衣襯著肌膚如雪冤议。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天师坎,我揣著相機與錄音恕酸,去河邊找鬼。 笑死胯陋,一個胖子當著我的面吹牛蕊温,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遏乔,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼义矛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盟萨?” 一聲冷哼從身側響起凉翻,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捻激,沒想到半個月后制轰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胞谭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年垃杖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韭赘。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡缩滨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泉瞻,到底是詐尸還是另有隱情脉漏,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布袖牙,位于F島的核電站侧巨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鞭达。R本人自食惡果不足惜司忱,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畴蹭。 院中可真熱鬧坦仍,春花似錦、人聲如沸叨襟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽野建。三九已至怀浆,卻和暖如春治宣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背提澎。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工姚垃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盼忌。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓积糯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碴犬。 傳聞我的和親對象是個殘疾皇子絮宁,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容