Haskellに惑わされ – 3

今回サーチして見つけたのがこのサイトでした なかなか簡潔に Haskellのイロハが記載されて助かりました このサイトではまったのが次のプログラム

letTest1 x = let a = 3
                 f v = v + 2
             in do a * f x

これを例えば letTest1.hsとしてファイル・セーブするのです そしてghciを立ち上げて compileすれば、letTest1という関数が認識されるので、ここで例えば

*Main>letTest1 2

と打ち込めば、この場合には 12という計算結果が戻ります しかし最初はこれがどうして 12になるのか全く分かりませんでした そもそも let文の中にある f v = v + 2 という式はどう解釈するのか? という問題です 色々と考えた結果、fは内部関数名、vは内部引数名であることに気づきました

従って、letTest1 2という命令を出せば、その定義で、2という実引数は xという引数に相当するので、最後の文である in do a * f xという文の中の xが 2に置換され、fという内部関数が実行されます その結果、内部的に f  = 2 + 2となりf という関数の戻り値は 4となります そして aは 3なので letTest1の結果は、3 * 4で 12となります

ここまで自分で自分に説明してようやく理解できました

Haskellに惑わされ – 2

最近相当に頭がバカになっている そんな気がするのです タイピング速度も低下し、頭の回転も遅い、そんな自分に嫌になります 何が原因か? うーん 歳かなあ いやいやそんなことではない 自分が怠惰になっているからなのだ そこで、こういう時の一番の気付け薬である Haskell programmingに戻りました うーんずいぶんと遠ざかっていましたね だって難しいんだもの こんな言語ってないよ 本当に 普通のプログラミング言語とは全く違うのです

僕だって色々な言語をこれまでいじってきたのでだいたい少しかじれば少なくとも Hello World!ぐらいは画面に出せるし、あるいは 1から 100までの足し算だってすぐにその言語でプログラム書けるようになりますよっ

でも、Haskellは別 全く分からない どうすればいいのか全く分からない まず最初の関門がその実行環境です

僕が現在「これが一番いい」と思っている環境は VisualStudio Codeをインストールして、その中で terminal (Bashなど)を立ち上げることです そうすると Haskell programを VS codeの中で書いて、そこで VS code内の terminalより実行できます

まず今回はまったのは 本に書いてあったサンプル・プログラムである 1から nまでの合計を求める関数です(再帰版)

$ghci

これによりHaskell正当のコンパイラ/インタプリタである Glasgow Haskell Compiler/Interpreterが立ち上がります そうすると僕の場合以下のようなプロンプトが terminalに出力され、Haskellのコマンド待ち、となります

GHCi, version 8.6.3: http://www.haskell.org/ghc/  :? for help
Prelude>

この環境はいわゆるREPL ( Read-Eval-Print Loop)というものなので、この Prelude>のコマンド待ち部分に入力することにより Haskellを実行できます ここでまずこの REPL ( Read-Eval-Print Loop)を用いて 本にあるようにプログラムを打ち込みます そうすると驚愕の結果となり、瞬時に勉強心を打ち砕かれます それは

Prelude> mysum 0 = 0
Prelude> mysum n = n + mysum (n - 1)
Prelude> 
Prelude> mysum 0
*** Exception: stack overflow
Prelude>

というような結果です 要するに本の通り打ち込んでも stack overflowという無限ループに陥りクラッシュするのです とんでもない とんでもない

僕は真剣に本に対してクレームをしようかと思いましたよっ しかししかし これをファイルとしてセーブするのです 試みにこのファイルを mysum.hs というものにしますね はい$lsすればセーブされたことがわかりますね

$ls -l
-rw-r--r--   1 transradial  staff       64  7 17 09:51 mysum.hs

そして再び Haskell を立ち上げます

$ghci

そうするとHaskellの REPLに入り

Prelude>

という待受になります ここで 次の GHCIコマンドによりさっきセーブしたファイルを読み込みます

Prelude>:l mysum.hs

このようにするとファイルが読み込まれ、コンパイルされて以下のように応答してきます

[1 of 1] Compiling Main             ( mysum.hs, interpreted )
Ok, one module loaded.
*Main>

今度は *Main> という待受になり、自分の書いたプログラムが正常に作動する状態になっているのです ここで

*Main>mysum 0
0

となりますね、つまり 0 (Zero)を引数として mysum関数を呼び出したところ、結果が 0である、と出力されたのですね では同様にして 100を引数として呼び出せばどうなるでしょうか?

*Main> mysum 100
5050

はいきちんと 1から100までの合計値 5050が出力されました

要するに、REPL環境で打ち込んでもダメなのです これが分かるのに相当に時間を浪費しました しかしその副作用で頭脳回転が早くなりましたね

JTVT終了しました

7月14日そして15日と鎌倉プリンスホテル・バンケットホールにおいて JTVT2019を開催させていただきました 当初よりその開催には幾多の困難が伴うと思っていました

  1. 公共交通機関によるアクセスが難しい – 実質的に江ノ電でしかアクセスできません
  2. 海の日であり、しかも湘南海岸なので交通渋滞がひどいと予想される

しかし蓋を開ければ、いい具合に軽い雨となり、これにより交通渋滞は著しく緩和され、しかも恐れていた江ノ電の混雑 – 実際土日には藤沢駅や、鎌倉駅での江ノ電乗降が制限されているのです その混雑もさほどではなく、参加者の方々には湘南海岸と江ノ電を楽しんで頂けたものと思われます

参加者総数もその前年に比較して100名以上増えました 実際4つの会議場にはたくさんの人々が集まって頂きホットしました この成功には、14日の日本国内では初めてとなるTAVIライブが素晴らしいできで仙台厚生病院より行われたこと、そしてTVTとの Joint Collaborationとして JTVTとして初めて開催され、あの世界的に有名な Martin Leon先生のご参加を頂いたこと、そして何より参加者全員のご協力、そして湘南鎌倉総合病院ハートチームのご協力、これら全てがいいように回ってくれたのです それが成功要因だったと思います 本当に皆様方には感謝のみです

これから各種残務整理が必要ですが、まずは自分自身の疲れを癒やしたいと思います 本当にありがとうございました