エンタングルメントosugi3yのブログ

14年勤めた企業をやめました。映画「時の行路」尾道市実行委員

CommonLisp学習日記〜シン・すべてがNになる〜

 

CommonLispの歴史

 CommomLisp、結構古い言語で既に使い手が死滅しているんじゃないかと言われている言語を今さら勉強している。今でさえエディタ、コードディタと言われているものは太古の昔にはテキストエディタでもあったということを僕は最近知ったんだ。太古の昔と書いたけどいつ頃だろうか。地球がこの世に誕生して昔は地球は海に覆われていた。そこから一つの大陸パンゲア大陸が生まれてその周りをパンサラッサが取り囲んでいた頃だろうか。この頃はまだプログラミング言語という概念自体がなかったように思う。それからパンゲア大陸プレートテクトニクスによって大陸が別れて現在のようになった。この頃には地上に生物が誕生したんだ。その後カンブリア大爆発によっていろんな種類の生物が誕生した。*1

 この時期に生物はいろんな試みをしたんだ鼻を伸ばしてみたり、目をいっぱいつけてみたり、でもやっぱり生きていくにはそんなにたくさんの目は必要じゃなかったので大体は2個ってのが主流になった。*2

 そして人類が誕生したんだ。人もサルから進化したとダーウィン自然淘汰論を発表したよね。その昔人類はネアンデルタール人ホモ・サピエンスが共存していた時期があると最近の研究で明らかになったりしてる。そして現代は人類はホモ・サピエンスのみになったんだ。この頃主流の言語はPythonだ。多分Pythonを勉強していれば困ることはないだろう(周りに使う人が多いだろうから)

プログラミングに必要なもの

 Common Lispネアンデルタール人ホモ・サピエンスが共存していた頃、つまりは1950年代後半に現れたんだ。書き方が他の言語と全然違うので使うことに賛否両論ある言語だ。僕も初めはPythonの入門書からプログラミング言語を学んだよ。僕がプログラミングを(Python)を学んで感じたことは、プログラミングは読書の新しい形だなってことだ。プログラミングを学ぶには本が必要だ。ネットにも情報が多いけど本になるためにはいろんな人の校閲が必要なんだ。それでできた本には誤字脱字が少ない。*3

 プログラムを学ぶのにもう一つ必要なものがあるそれが現在コードエディタとかエディタとか言われているものである。僕もMacを買った時に友人からエディタは何を使えばいい?と聞いて「なんでもいいよ」と言われたけれど、多分なんでもよくなかったんだ。WordじゃCommon Lispは書けないし、Macのメモでもダメだろう。

 Pythonの場合は、Google Colaboratoryなんかを使ったりすればネット環境があれば書けちゃうんだ。僕もPythonを学んだ時はGoogleColaboratoryを使っていたからね。僕は今思うとすごく奇妙なことをしていたんだけどPythonを学びながらポール・グレアムさんの「ハッカーと画家」というエッセイを読んでいたんだ。*4なぜかそれに感銘を受けてCommon Lispを学んでみたいと思ったんだ。何かを学ぶにはそれだけの価値をそこに見出せなければならない。実用的な面があった方がいい。そうだな大きな音の出る指笛なんか実用的だ。僕は指笛よりはCommon Lispを学ぶことに価値を感じている。

 偶然にもハッカーと画家」にプログラミングを学ぶには最初はPythonがいいと書いてあった *5のでとりあえず一冊の薄い本を終わらせた。確かに今思えば計算式の表現が人間界のそれと同じなので初学者にもとっつきやすかった。*6ので満を持して書店でCommonLispの本を探すんだけど、大体いつも行く本屋にはCommonLispの本が置いてなかったんだ。

エディタ探しの旅

 仕方がないのでAmazonで「Land of Lisp」を注文した。「Land of Lisp」に記述環境はREPL(Read-eval-print loop)でやるべしと書いてあったのでそれを導入したGoogleColaboratoryに比べて書き間違いや書き直しを許さないハードコアなエディタだ。*7

 まるで、エアーマンが倒せない、の歌のような感じがある。プログラミングにおいて失敗は全て自分の責任だ。諦めてもよかったんだけどAmazonに注文という高いハードルを超えて入手した「Land of Lisp」だ、諦めるわけにはいかない、ネットで検索してみるとエディタを入手して拡張機能を使うとCommonLispが書けるようになるらしい。聞いたことのあるEmaxをPCに入れてみる、CommonLispも拡張で使えるようになるらしいんだけどどうもやり方がわからない、それでもEmaxはElispというのが使えるのでPCに残しておいた。それにEmaxはゲームもできる、あのテトリスも遊べるのだ。何よりリチャード・ストールマンの存在自体がユーモラスだ。

 AIにエディタを探していたと話したところ「Visual Studio Code」でも拡張機能でCommonLispが書けますよと言われたので初めはマイクロソフトのエディタなんてって反発したものの一物の望みをかけてインストールしてみる。契約書みたいなのが表示されてデータはマイクロソフトが取得するがよろしいか?みたいなのが表示される、まあいいさ、本当に書けるようになったらEmaxでやるからさ、と思い承諾。さあ CommonLispの導入は大変だぞと思ったものの、めちゃくちゃ簡単で驚いた。エディタ自体も視認性向上のためにカラフルでダークで厨二感を刺激されていい感じだ。

  CommonLispが他とは違うと言われる原因として()を多用する部分があると思う。「Visual Studio Code」だとそれも一個書くと綴じる部分まで自動で書いてくれるので括弧の閉じ忘れがなくてよさそうだ、と感じた。

 しかし使ってみるとどうもコードの実行ができないようだ、いやどうにかすればできるのだろうけど僕の検索技術では発見不可能だった。仕方なくまたREPLでやるかと思い、しかし失敗すると最初からになるので評価が返ってきてコードを紙に記録していくことにしたんだ。それが前回までのお話だ。

osugi3y.hatenablog.com

画面にVisual Studio Codeと表示される

 そんな感じでREPLで評価が返ってきたコードを記録していく学習スタイルになったんだ、つまりはプログラミングを学ぶためには本と、その本が指定する環境構築が必要なんだ。このPythonとCommonLispを学び始める間に*8Pythonの本を買ったんだけどそれをGoogleColaboratoryでできるでしょと思ってやってみたがちょっと返しが違ったりでやっぱり指定されている環境でやるべきなんだろうな、と思い直したんだ。プログラマーというとものすごい速度でPCをタイピングしているイメージが強いけど、「Land of Lisp」に書いてあることをしようとしたら細心の注意が必要だ。一行コードを書くと休憩そんな感じだ。そんなことをして休憩して返ってきてPCを開いて驚いたんだ。f:id:osugi3y:20230413090705j:image

 REPLに打ち込んだ記憶のない「Visual Studio CodeVisual Studio Code」という文字が表示されている。プログラミングのことを考えすぎて頭がおかしくなったのかと思った。*9

 まあ何かの偶然というかVisual Studio CodeでもCommonLispができますよってメッセージかと思い色々やってみるけどやはりコード実行ができないんだ。仕方がないから括弧の閉じ忘れの確認用にVisual Studio Codeのウィンドウも開いて一緒に記述していくことにした。一旦確認しよう、今僕がしている学習環境では机に「Land of Lisp」PC休憩用の読書用に「ハッカーと画家」pcの画面にはVisual Studio Code ,REPLを開いている。杉田水脈さんが見たら生産性が低い!と怒られそうだ。

 確かにコードの実行速度は驚くほど遅くなった。しかし色々忙しくバックアップや実行や紙に記述なんかしているとものすごく達成感があるんだ。この段階くらいから、CommonLispをするのが苦行から楽しみに変わってきたんだ。

 それでも中学校2年生の男子なんかは自由進度の実験なんかをやってるのをみると速度最優先なんだよね。そういう人はChatGPTやGPT-4を利用してPythonをやるって選択肢もあるよ。

 実際このゆっくりとした学習方法には利点もあって記述間違いが少なくなるのはもちろんなんだけど、「Land of Lisp」に書かれている本文の意味を考えるようになるんだ。ゲームのエンジンを作っていくんだけどCommonLispは文字列を表示できるけどそれは本質的にはLispの得意とするところじゃないからできる限りデータかコードとして扱うようにするとかだ。まあそうは書いてもちょっとわかったくらいだまだまだこれからなんだよ。

ノートで3ページくらいは進んだかな。

f:id:osugi3y:20230413093208j:image

 あと、学習の帰りにちょっとニュースで見かけたカウアン青年が「ジャニさんに15回されました」という記事が気になったので詳細を見に書店へ。僕の予想ではア○ルに突っ込まれたのが15回だと予想していたのだけれどジャニーさんは彼の腰より上にはこなっかったようだ。それでもそのあと全てを飲み干し歯を磨いて出て行ったらしい。なぜカウアン青年はこのことを実名顔出しで記者会見までしたのだろう。黙っていれば他のジャニーズのタレントもそういう行いを受けてきたとファンにも知られずに女性ファンも安心して彼らを応援し続けられたのに。しかもそれが嫌だったんならその時言えばよかったのに。警察でも基本交通違反なんかは現行犯が基本だ。車両侵入禁止区域にいた場合はちょっと泳がせておくということもあるみたいだけど。カウアン青年、彼はスマホ世代だ文春の記事にはスマホで行為を撮影していたとある。次の暴露はその動画になるのかな。でも死人を踏みつける行為のようで僕はこの会見に良いイメージが持てなかった。踏みつけるというと言い過ぎかもしれないけれど死体をまたでいる感はある。僕の好きな言葉に「人を導く者は・・・己の死体をまたがれることがあっても仲間の死体をまたいだりしない」てのがあるのでちょっ引っかかったんだよね。まあカウアン青年は人を導くものを目指しているわけではないらしいし。*10

 

*1:アノマロカリスとかが有名だよね。

*2:もしかしたら目がふたつじゃない生物や目を無くした生物も存在しているかもしれないけどね。

*3:全くないって訳じゃないし不等号が反対だったりする場合もある、それにプログラムの場合誤字だと全く受け付けてくれない場合があるからコンピュータに読ませるところの記述は特に念入りにしないといけないように思う。

*4:なぜ奇妙かといえばポール・グレアムさんは天才Lispハッカーだからだ。

*5:2週目を読んでいて気付いたんだけど、正しくはハッカーと画家の中で引用されているエリック・レイモンドの「はっかーになろう」の記述だ。

*6:内部構造を理解して自由自在に表現するにはもっとやらないといけないけど、現実に取り出して活用できる見込みのあるプログラムは書けた(この場合IT業界風にいうと写経した。)

*7:REPLは厳密にはエディタではないのかもしれないけど一応そう記述しておく。

*8:AmazonからLans of Lispが届くまでの間の期間のこと

*9:自作自演でしょと思った人はそう思ってくれて大丈夫です。でも本当なんだ。

*10:カウアン青年はジャスティン・ビーバーに憧れてこの世界に入ったらしい。この会見でジャスティンに少しは近づけたかな。有名にはなれたよね。