2013年9月20日 星期五

lisp note 2

 最近讀lisp的心得,感覺的確是一個滿有趣的語言,要說讓我不怎麼喜歡的地方,大概就是那一堆(())這些符號,真的讓我剛開始,看到眼花,語言的可讀性跟python比起來真的差很多 :( 但是我也在想就是因為他的這種語言特性,才會讓lisp這麼多彩多姿 :),也讓lisp有個說法是lisp就像是DNA一樣。


lisp全名是(list processor),從這名字就可以略知一二了,在這程式語言裡,你會看到一堆list,事實也是如此,大致上可以這樣看,lisp裡面的元素,可以分為兩種非cons,是cons,是什麼意思呢?

cons掌控著兩個指標,第一個指標指的元素(car),第二個是(cdr),所以你會看到有語法是這樣的, (car '(1 2)), 這將會得到1,想當然爾(cdr '(1 2)),就是得到2,看到我看到這樣的語法時,心中就開始想了一件事.....
那就是,既然這語法是成功執行的,那是不是代表後面那東西就是一種cons所組成的物件?
後來,經過網路上的搜尋後,事實果然就是如此!!

其實 (1 2),它相當於(cons 1 (cons 2 nil))這樣,當然你會想,要是你想建一個很長的list,那豈不是要打一長串這樣的東西,很麻煩 :( ,lisp是有提供一個syntax sugar的,那就是list,(list 1 2),這樣的效果是一樣的。因此這也給我了一個想法,用cons是可以做出額外許多東西的,或許可以建造新型態? 只是目前我也沒試過,所以說lisp裡面的元素非cons即cons,似乎也無可厚非呢 :)

lisp這語言實在有好多東西要挖喔 :) 目前我沒辦法闡述太多心得,因為還有太多東西沒讀到,也還有太多東西沒釐清,所以沒辦法寫太多心得出來,但是,有一點是lisp有一些語法是有歷史淵源的,我覺得看那些歷史淵源,讓我了解更多的東西,千萬不要遇到語法就硬記,當你知道他的淵源,使用它就跟喝水一樣自然:)

我是這麼認為的,有太多人只把語言當作工具而利用,而沒有去深層了解他背後的語意和哲學,我覺得這是很可惜的,就像是為了考試而讀書一樣,沒有去了解書中給你的意境,想當然爾,會覺得讀書無趣,食之無味。 或許這就是現實面吧,我想lisp有效率上的問題,所以在以前才沒有熱門起來,但是不管如何,我還是覺得lisp值得一學,至少它目前讓我開了許多眼界 :)


在此提供一個可以當做文件查詢的網站 reference
另外lisp的表示法是用前序表達,這或許也是讓許多人第一次看不習慣的原因吧,這邊有個wiki 可以看

0 意見:

張貼留言