Haskell

関数型プログラミングをする際にどう考えてコードに落とすか?

もう数年関数型プログラミングを断続的に勉強し続けていますが、作れと言われれば作れるものの出来上がるコードが全然関数型じゃないばかりかスマートじゃありません。これはもうオブジェクト指向や手続き型に脳みそが浸食されていて、考え方の部分から関数…

HaskellのData.Treeを使ってみる

Tic Tac Toe(○×ゲーム)のゲーム履歴(History)の保存に使えそうな、Data.Treeというデータ型を標準ライブラリから見つけました。自分でほぼ同じものを作ろうとしていたのでちょっと調べてみて使えそうなら使おうと思います。 まず、どんなものか調べてみます…

Haskellの演算子について纏めてみた

人が作ったHaskellのコードを読んでいると、記号の意味がわからなくて困ることが多々あったので纏めてみた。hrefでもGoogleでも検索できないしさ… Haskellの演算子で使える記号 !#$%&*+./?@\^|-~及びUnicodeに含まれる記号(一覧が欲しい…けど√とか→とかもき…

Haskellで素数を求めるよ

今回は息抜きです。Haskellで素数を求めてみます。 まずは、普通に1と自分以外(√自分)の間の整数で割れなかったら素数とします。 {-- 素数の一覧を表示 単純に全ての整数(2 〜 √x)で割ってみる --} -- xが素数だったらTrueを返す is_prime :: Int -> Bool is…

HaskellでTic Tac Toe(1)

この前http://d.hatena.ne.jp/marony0607/20111113/1321144101、HaskellでTic-Tac-Toe(○×ゲーム)を作ると宣言しました。完成したら公開しようと思っていましたが、なかなか時間が取れずいつになるか分からないので、今の時点でのコードを公開します。 まずコ…

高階関数とクロージャとカリー化と部分適用

今回は自分の関数型言語の疑問点を全部解決します。すぐ忘れるので備忘録も兼ねています。まだまだ勉強中で分からないことだらけなんですが、ひとまずよく話題に上るけどよく分かってない用語を取り上げました。今回もHaskellで検証しました。 関数型言語に…

HaskellでTic-Tac-Toe概要

突然ですが、HaskellでTic-Tac-Toe(○×ゲーム)を作ることにしました。簡単にどんなものを作るのか決めたいと思います。ScalaでSWT使って作るのと悩んだのですが、関数型言語に慣れるためにあえてHaskellで行きます。 要件 コンソールアプリケーションとする …

HaskellでFizzBuzz問題を解く(5)

前回http://d.hatena.ne.jp/marony0607/20111031/1320050127FizzBuzz問題は終わりにしますって言ったんですが、どうも気になって仕方がないので続きます。FizzBuzz問題くらいスマートに解きたいじゃないですか。 気になっていたのは、呼び出し側(main関数)が…

Haskellのモナドについて

とうとうHaskellの鬼門「モナド」の話です。色々と試してみました。基本の文法も分かってないのにモナドなんてやってる場合かよっていう状態ですが… モナド 私なりに理解したHaskellのモナドとは、 モナドとは単なる入れ物(ただし、return関数と">>="演算子…

HaskellでFizzBuzz問題を解く(4)

前々回http://d.hatena.ne.jp/marony0607/20111025/1319547210の続きです。 ruiccさんにコメント欄でElem型に比較演算子などを定義する方法を教えていただいたので、それを自分なりに使用して綺麗なコードに書き換えてみました。 まず、Elem型をShow, Eq, Or…

HaskellでFizzBuzz問題を解く(3)

えーと、今回のは番外編です。HaskellでのFizzBuzz問題ですが、さすがの私でも剰余を使えば出来るんだよということをお見せします!!(前回http://d.hatena.ne.jp/marony0607/20111025/1319547210) (本当はガード式とかタプルとかリストの内包表記とかを勉強…

HaskellでFizzBuzz問題を解く(2)

FizzBuzzも解けない開発者だというのはやはり問題なので、前回http://d.hatena.ne.jp/marony0607/20111023/1319331471に続きひたすら頑張ります。前回、最初の5しか"Buzz"に変換されなかったのは、myElem関数の中の"x > y"の不等号が逆だったからでした。"x …

HaskellでFizzBuzz問題を解く(1)

関数型言語はいまだによく分かってませんが、具体的なプログラムを書いてみればちょっとはわかるかなと思って、FizzBuzz問題を解いてみることにしました。 FizzBuzz問題についてはこちら。Fizz Buzz - Wikipedia ちなみに、まったく調べずに解くのはまだ無理…

Scala訳わかんね(2)…Haskellも使ってみる

未だに関数型言語とは何かがよく分かってません。 続けて勉強していきます。なお、Scalaだとオブジェクト指向というか手続きも書けてしまうので、Haskellも同時に使っていくことにしました。もしくは、Haskellを先に覚えてScalaを覚えるという順番になるかも…