やっちのわいわい日記

電通大に編入した元高専生の日記。日記を書きつつ編入のこととか勉強のこととか書こうと思っています。編入とかで質問があるかたは@amhflcl0514にDMくださいお

Haskell 2.よく分からない

そういえばマリオテニスについてなにも書いてないです。マリオテニスやってるんですけど、特に報告することも無いので。。。

WiiUが買えてたらよかったんですけどね。

 

ではHaskellについて少し進めたので書いていこうと思います。

結局なんなのかよく分からない

引き続きカブトムシの本を進めていきました。図書館の返却期限が近いのでこの後はどうするか悩みどころです。

 

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

 

 今回はこの本の2章「型と関数」を進めました。ブログにやったことを適当に書いていくと復習になるので結構いいです。

とりあえず型について厳密

これまで学校の授業とかでCとかjavaとかに触れてきましたが、int型の値をfloat型に代入できたりしその辺の気を遣う必要がないのに対して、Haskellは厳密に型が一致しないとコンパイルできません。

このことの利点としてはデバッグの手間が減るとあったのですが、よく分かりませんでした。きっと進めると分かるものだと信じていきます。

あとInt型がシステムの最長の内部整数に依存するらしいので、僕のパソコンだと64ビットだということですかね。

関数とかもとりあえず型

関数も型です。とりあえずvoid型というものは存在しないという程度の認識です。関数型言語だから当たり前なのか。広い目で見れば演算も関数として捉えてしまってよいのでしょうか。

リストとタプル

タプルとかいう強そうな名前が出てきました。リストとタプルの違いは、リストは同一の型の並びで、タプルは異なる型が集まったもの(構造体みたいなもの)というふうに覚えました。

リストもリストの中にリストがあったりするので複雑ですが、慣れればなんとかなりそうな感じもしました。

あとリスト上とタプル上の関数があるということが分かりました。

変数が結び付けられる

Cとかjavaとかだと変数を宣言するとその変数に代入ウェイwwwwってしたくなるのですが、Haskellはそれが許されないらしいのです。宣言時の値でそのメモリは基本固定って感じでよいのだろうか。

条件式

おなじみif文が出てきて安心しました。サンプルコードがDropと同じことを行うコードです。

myDrop n xs = if n <= 0 || null xs
then xs
else myDrop (n - 1) (tail xs)

…わからん(ニッコリ)

とりあえず使い方を見てみると

if (Bool) then a else b

らしいです。ifの隣の(Bool)(述語)がTrueだとthenの後が適用され、Falseだとelseの後が適用されるということです。この時aとbは同一の型でなくてはなりません。

myDropの例だとnull という関数がありますが、これがリストがnullだとTrueを返すBool型を返す関数だということで納得です。

遅延評価

Haskellの特徴として挙げられるらしい遅延評価です。

なんなのかよくわからなかったのですが、他の言語ではコンパイルの時点で括弧の中も含めて全て決定てしまうのですが、括弧の中の値は必要になった時に計算を行うらしいのです。未評価の式を追跡するのに遣うレコードをサンクと呼ぶそうです。

これによって条件式の||の片方がTrueだったらもう片方は評価する必要がないみたいなことがかいてありました。

再帰

再帰処理って難しい

多相性

型について厳密なのに型について知らないってよく分からない

まとめ

2章ではHaskellの特徴をざっくりと説明してました。ここから各章で細かく説明するそうです。

ここまでやってよくわからないんですけど、Haskellっておもしろい言語だなっておもいました。

色々調べていると入門用の本ではカブトムシの本は向かないらしく、↓↓がよいらしいです。

 

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

 
プログラミングHaskell

プログラミングHaskell

 

 

 図書館の返却期限がきてしまったのでこの先はなんの本でやるか悩みどころです。