Eyes, JAPAN Blog > Land of Lisp から始める Lisper 生活

Land of Lisp から始める Lisper 生活

Shota Oikawa

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

近年の人工知能ブームに伴い、古き良き Common Lisp が再び注目されています。私も Common Lisp を通して、この人工知能ブームに乗り、最終的にはシンギュラリティを….

ということで、Common Lisp の勉強を進めていくために O’REILLY 発行の Land of Lisp という素晴らしい本を購入しました!

blablabla

こちらの本は、Lisp のインタプリンタを用いてコードを逐次実行し、挙動を見ながら学んでいくスタイルで書かれています。そのため、より深く理解して学習を進められます。

私は、Lisp の処理系として CLISP を使用しています。最近は slime を用いて Emacs 上で快適な Lisp 生活を送っています。

 

Common Lisp とは

しばしば Common Lisp は関数型言語だと思われがちですが、実はマルチパラダイム言語でもあるのです。

そんな素敵な Common Lisp の特徴は、とにかく括弧が多いということです。Common Lisp について調べるとそれはすぐに分かると思います。

そもそも、Common Lisp は lambda コマンドのために産まれたらしいので、今回は Common Lisp における lambda に焦点を当てていきたいと思います。

 

Common Lisp の lambda

lambda は無名関数で、これを Common Lisp のコードに埋め込むとコードの量が減ったり、見やすくなったりします。

(lambda (n) (+ n n))

これで受け取った引数を2倍にした値が評価されます。

では次に、与えられたリストを2倍にしたリストを評価するコードを lambda を使わない場合と、使った場合を書いていきます。ご参考にしていただけると幸いです。

まず、list 変数に リスト(1 3 4 6)を与えます

(defparameter list '(1 3 4 6))

・lambda を使わない場合

(defun double-list (list)
 (when list
  (cons (* 2 (car list)) (double-list (cdr list)))))

・lambda を使う場合

(mapcar (lambda (x)
      (* x 2))
     list)

するとどちらも評価されたリスト (2 6 8 12) が得られます
ここで出てきた mapcar は高階関数です。高階関数は関数を引数にすることができます。そのため、上記のようにコードの量を減らすことができます。

これからさらに勉強を進め、Land of Lisp の住人になります。

 

参考文献

https://www.oreilly.co.jp/books/9784873115870/ : Land of Lisp

Comments are closed.