Lisp勉強1

今まで手続き型言語とか、オブジェクト指向の奴ばっかり扱ってきたので、関数型言語とかよくわからん。
古典的にLispを勉強してみようと思った。
プログラムは日々圧倒的成長が必要なのだ。(しらんけど)

Ubuntuでやってます。
まずは適当にLisp Commonパッケージをインストール
処理系の違いはよく分からん。
sudo apt-get install sbcl

sbclの対話の奴でやってみる。
公式っぽいところのチュートリアルみつつ
(format t "Hello World")
へ~、文字列型扱えるんだ。

続いて、関数を見る。
まずは四則演算
(+ 1 2)
ポーランド記法だ。おそらく(関数名 引数…)って感じだろう。

(+ 1 (* 3 5))
入れ子。いいね。部分的ポーランド記法だな。

なんか虚数も扱えるらしい。数学的だ……
(私は普通に数学苦手です)

(let ((str "Hello, world!")) (string-upcase str))
はい、意味不明です。

調べてみると、
letは局所変数を宣言する関数(マクロ)のようです。
どうやら、C#あたりでいうローカル変数とそのスコープを定義しているみたいです。

let (A) (B)
(A)が変数定義をする引数、(B)がスコープ内部、次の命令的な奴を並べてくそう。
ほほう。

つまり、
str = "Hello, world!"
str.toUpper()

みたいな感じですね。なるほどなるほど。

let*を使うと、前に定義した値を使えるっぽいです(?)変数定義の時に初期値の値の関数が展開されるってことですかね……

(let ((x 2)) (if (= x 2) x (+ x 4)))

if文。なるほどね。boolを返す関数を比較演算っぽく利用するんだ。
というか変数を直で書くと表示されるんだね。ふむ。

次はリストやってます。
メイン処理は基本的にリストをうまく利用して書いていくそうです。なかなか奥深い。
ちょっと楽しくなってきました。
関数型もなかなかいい感じです。