2013年3月22日 星期五

初探 lisp

終於要開始學習這個古老的語言了, 會對 lisp 有興趣是因為 emacs 的關係, 雖然我現在還不會使用 emacs, 不過先來學習 lisp 也不錯。它不是 c like 的語言, 我想看看學習這樣的語言以往的程式經驗還能適用嗎?我能快速上手 lisp 嗎?之前學習 python 能快速上手, 但對於 lisp 我沒有這樣的信心。

一樣在 linux 環境下學習。

apt-get install gcl

就可以開始練習了。

我的參考書 lisp 基礎 李漢銘 儒林:
http://books.google.com.tw/books/about/LISP%E5%9F%BA%E7%A4%8E.html?id=qvB6MwEACAAJ&redir_esc=y

為什麼沒照片? 嗯 ...

薄薄的 218 頁, 我最喜歡這種學習書籍了。

好像是 http://www.biolisp.org/llisp/index.html 中文版本。

descent@w-linux:~$ gcl 
GCL (GNU Common Lisp)  2.6.7 CLtL1    Feb 15 2010 17:57:54
Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (XGCL READLINE BFD UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.
Temporary directory for compiler files set to /tmp/

>(car '(1 2 3 4))

1

>(cdr '(1 2 3 4))

(2 3 4)

>

令人困惑的 car, cdr

page 24 ex1 的作業就難倒我:
把這個 list 反轉, 到這裡只有 car, adr, cons, conc 這四個 function 可用。
((Bill 1234567) (simon 555) (jane 201))
變這樣:
((jane 201) (simon 555) (Bill 1234567))

> (cons (caddr '((Bill 1234567) (simon 555) (jane 201))) (cons (cadr '((Bill 1234567) (simon 555) (jane 201))) (cons (car '((Bill 1234567) (simon 555) (jane 201)) ) '()) ))

很恐怖吧!

http://blog.sina.com.cn/s/blog_5d90e82f0101jo6r.html
提到的 dynamic scoping 問題, 在 gcl 運作的方式是我們預期的那樣, 在 emacs 則不是。

在 emcas 可以這樣用:
啟動 emcas, 進入 lisp-interaction-mode

M-x lisp-interaction-mode
按下
ESC x lisp-interaction-mode

(+ 3 4)
7
(cdr '(1 2 3 4))
(2 3 4)
(car '(1 2 3 4))
1

在每行程式碼最後按下 ctrl+j 就會得到結果。

mit-scheme

install mit-scheme in linux/debian
apt-get install mit-scheme

run mit-scheme

descent@debian-vm:~$ mit-scheme

ctrl+c q exit mit-scheme


mit-scheme 教學:
http://faculty.csie.ntust.edu.tw/~ywu/cs4001301/MITScheme_tutorial.pdf
http://faculty.csie.ntust.edu.tw/~ywu/cs4001301/Scheme_tutorial.pdf


ref:
你是如何成為Lisp程序員的?
Lisp 入門 / 序章 如何開始
use gcl compile lisp porgram

1 則留言:

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。