2024/04/20

え、そんな授業受けてたんですか?

不要なモノを整理していたら

親父の死後、遺品整理をゆるゆると進めている流れで、自分の不要なモノも整理しようと、クローゼットのダンボールを開けていたところ、学生時代の教科書が出てきました。

経済学部だったので、経済原論、経済史、経営論など「あ〜やったな、こんな授業」といった懐かしい本がいっぱい入っていました。

懐かしく感じながら見ていると、なんとムイスリ出版社「Pascalの基礎」という3.5インチ2DDフロッピー付きの本が出てきました。

私はどうやら学生時代にPascalの授業を受けていたようです。

Pascal?全く記憶にございません。すみません。

教科書のあいだに、ところどころルーズリーフが挟んであり、”手書きの”コードが書かれていました。授業でキーボードを叩いた記憶がないので、おそらく紙と鉛筆を使った授業だったのでしょう。

それらは今見ると、本来書くべきものは基本的なアルゴリズムなのに、非常に、とてつもなく無茶苦茶なコードで意味不明なものでした。

紙にすらちゃんと書けないということは全く理解できていなかったのでしょう。

間違いなくこの授業の単位は落としているでしょう。いや落としました。

あれから30年近く経て

懐かしついでに、この「Pascalの基礎」の教科書をざ〜っと読み返してみました。あくまで本をさらっと読み返しただけです。コンパイラをダウンロードしたり、実際コードを書いたりはしてません。さすがに、Pascalに手を出す時間はありません。

当時は家にパソコンはなかったし、授業でもほとんど使ってなかったし、パソコン自体に慣れてないので、全く興味を持つことができなかった。

そんな状態でこの本を読んでも分かるわけがない...

...

しっかりやっておけばよかった...

プログラミングがある程度できるようになった現在、今度は生成AIの登場である。

どうやら人間がカタカタとプログラムを叩く機会は確実に減りそうである。

私はどうやら時代の流れを読むのが下手らしい。

いや先見の明がないのだろう。

最近の状況

ここのところ、母のことはありますが、OCamlの勉強は進めています。

最近躓いたものは、OCamlのBase.Mapの使用方法です。

OCamlのBase.Mapは、空の状態のMapを作ることも連想リスト(association list、alist)から作ることもできます。


    # (* 空のMap *)
    # let empty_map = Map.empty (module String) ;;
    # (* 連想リストから作成 *)
    # let friends = Map.of_alist_exn (module String) [("Tom", "tom@tom.com"); ("Mike", "mike@mk.com")] ;;

Base.SetやBase.Mapには、Comparatorやcomparator_witnessというものが出てきますが(詳しくはRealWorldOCamlをお読みください)、これは理解できました。ひっかかったのは、Map.addです。

私の最初の感覚では「Map.addか、これ使えば新しいエントリーを追加できるんだな」でした。

しかし実際やってみると、エラーになるのです。

「は?」

調べた結果、単純にMap.addするわけにはいかなかった。Mapは基本、keyの重複はNG。単純にMap.addする場合、重複チェックが行われない。なので、Map.add_exnを使うことで、もし重複があればexnつまりexceptionを送出するという、この関数を用いればうまくいきました。

ややこしや、ややこしや