夕蛙のなく頃に

データアナリストとして学んだことや趣味で勉強し始めたIoTをアウトプットする

「Land of Lisp」を読みました

Land of Lisp

Land of Lisp

モチベ

漠然としたLispへの憧れを持っており、深町さんのブログも購読していて、いつか勉強したいと思っていました。

blog.8arrow.org

そこへ社内wikiに面白かった本として挙げられているのを発見し、業務と関係ないことを勉強したい気持ちだったので取り組み始めました。

内容

大まかに以下のような内容でした。

  1. 基本的な書き方
  2. 簡易的なwebサーバー実装
  3. REPL上での簡易的なゲーム実装
  4. svgを作れる関数実装
  5. 2,3,4を組み合わせたGUIのwebアプリケーションゲーム実装

感想

Lisp面白い!と感じられました。今まで目的ベースに急ピッチで言語を学んできたので(分析のためのPython, データ抽出のためにSQL, データ可視化のためにVue.js)、単純に言語自体に興味を持って学ぶという経験が初めてだったからというのは、あるかもしれません。

最初はカッコの多さにびびり、なんて書きにくい言語なんだ...と思いましたが、写経していくうちに書くのが楽しくなってきて、インデントも合わせて整備することで、むしろ読みやすいと思えてきました。

# python
a = 5
b = 6
print(a + b)

; common lisp
(let ((a 5)
      (b 6))
    (+ a b))

内容の2,3,4ではそれほど難しい実装をしません。しかし、それらを組み合わせると突然CUIのゲームがブラウザを通したGUIゲームになります。これがきちんとした設計をした関数型プログラミングか!と感動しました。

CUIによるゲーム
f:id:frogdusk:20200901182805p:plain

これがちょっと修正をしてこう
f:id:frogdusk:20200901182812p:plain

次学びたいこと

関数型プログラミングができるように設計をちゃんと学びたいです。(写経しつつ、こんな綺麗な設計、自分一人では絶対できないと思いました...)

「オブジェクト指向でなぜつくるのか 第2版」を読みました - 夕蛙のなく頃に ではデザインパターンをと書きましたが、設計-->デザインパターンという順序で学ぶのがよさそうです。

また、簡単なスクリプトはCommonLispで書いていこうと思います+1