ラベル Haskell の投稿を表示しています。 すべての投稿を表示
ラベル Haskell の投稿を表示しています。 すべての投稿を表示

2020/05/28

再帰の処理を追うのがすこぶる苦手

OCamlのL99-27でピタッと止まる

しばらく記事の更新が遅れてしまってました。実はここのところOCamlのL99問題の答えを読みながら、それをCommon Lispで書いてみるということをずっとやっていました。

なぜこのようなやり方をしているのかと言いますと、そもそも私はOCamlにはまだ慣れていないし、Common Lispも初心者という状態です。しかし、年齢的にも生活的にも時間が限られている。したがって、少しばかり理解しているOCamlのコードを読むことでより一層OCamlに慣れ、さらにCommon Lispで書くことによって、Common Lispにも慣れていく、という方法を思いつきました。そもそもL99問題の解答は、プロの方がベストなものを提供してくれているわけですから、よい見本にもなるのではないか、と思います。


2020/05/08

RustとHaskellを比較してみる

traitとtype class

あくまでど素人の考えですが、RustとHaskellは似ているのかなと思うところがありました。それはRustのtraitとHaskellのtype classです。

Rustにはi32とかcharとかがあり、HaskellにはIntとかCharとか、それぞれ基本的な型がありますが、それらに様々な機能を持たせるものとしてtraitとtype classがあって、例えばRustのi32AddEqOrdなどの多くのtraitが実装されています。これらが実装されているおかげで、四則演算や比較などができるのですが、Haskellも似たような感じになっていました。


2020/04/27

そうだ、この機会にHaskellやってみよう

Haskellとは

Haskellは非正格な純粋関数型言語だそうです。非正格というのは関数の引数は関数本体が実際に使われるまで評価されないというもので、遅延評価とも言うようです。OCamlとは違った(OCamlはデフォルトでは正格)関数型言語ということになります。OCamlでもLazyを使って遅延評価にすることは可能です。そして純粋関数型言語というのは「参照透過性」が常に保たれる。「参照透過性」が常に保たれるということは、関数への入力が同じであれば常に同じ結果を得られるということで、思わぬ不具合が起きにくいということでもあります。例えば、親子丼を注文したら、必ずいつもの鳥と卵を使った親子丼が出てくるということです。