Haskell

年末年始の作業

2015年12月25日から2016年1月3日まで、さくらのレンタルサーバで15年ぐらいメンテナンスしている掲示板の刷新を行った。元の掲示板は Perl で実装してあって、古い掲示板にありがちなヒアドキュメントで HTML を出力する形式になっていて、メンテナンスが非…

Haskell と SDL #2

Haskell と SDL - satosystemsの日記 の続きです。マウスイベントをハンドリングして画像を描画するようにしてみました。今までは main 関数内に直接記述していた描画コードを、以下のように関数として切り出しました。 drawImage :: SDL.Window -> Ptr SDL.…

Haskell と SDL

この記事は Haskell Advent Calendar 2014 の 8 日目の記事です。Haskell で SDL を利用してゲーム的な何かを作成するための入門記事です。 環境構築(Haskell Platform) Haskell の開発環境は Windows/Mac/Linux いずれでも構築可能です。僕は普段は Haske…

あるポーカーの手役で最善手を検証してみる

Haskell でポーカー役判定処理を作ったので、これを使って遊んでみる。以下の手札があったとする。よくある感じの手札だと思う。ここから、何をどう切ると、どれぐらいの期待値で勝利するのか、というのを検証してみたい。ルールは以下とする。 一回だけチェ…

Haskell でポーカーの役判定処理 #3

Haskell でポーカーの役判定処理 #2 - satosystemsの日記 の続き。だいぶ良くなったと思う。改善したのは以下の箇所。 Maybe をモナドとして使用するようにした リストに対してリスト操作関数を適切に使用するようにした ジョーカーを使うとフルハウスで勝敗…

Haskell でポーカーの役判定処理 #2

Haskell でポーカーの役判定処理 - satosystemsの日記 の続き。ポーカーの役判定処理をイチから書き直した。 改善されたのは以下。 エースが数値で最も強いルールに改善 絵柄による役の強さに改善 ジョーカーがあっても判定できるように改善 いくつかのバグ…

Haskell でポーカーの役判定処理

麻雀の役判定処理を Haskell で書いてみようかと思って、スモールスタートとしてポーカーの役判定処理を書いてみた。最初はすべてのカードをデータコンストラクタとして定義する方法を検討していたんだけど、データコンストラクタが多くなりすぎてパターンマ…

Haskell で作成した DLL を秀丸マクロから呼び出す

秀丸で Haskell 開発環境をパワーアップさせるために、マクロから呼び出す DLL を Haskell で書ければハッピーになれると思い、調べた結果をまとめておきます。 環境 OS: Windows 7 Haskell: Haskell Platform 2013 2.0 GHC: ghc 7.6.3 秀丸: 8.35 32bit は…

Haskell でファイルシステムの変更を検出する

この記事は Haskell Advent Calendar 2013 の 15 日目の記事です。Haskell でファイルシステムの変更を検出する方法を調査してみました。いきなり Java で恐縮ですが、イメージとしては以下の様な感じです。 import java.nio.file.*; import static java.nio…

Haskell で XML と JSON をパースする方法

調査がひと段落ついたので冒険の書にセーブ。 XML のパース Haskell の XML パーサは結構種類が豊富です。Which Haskell XML library to use? - Stack Overflow によると、 xml: 処理が簡単なら haxml: 処理が複雑なら hxt: 矢印が好きなら hexpat: パフォー…

フィボナッチで各種言語をベンチマーク

AWK、Ada、Bash、Boo、C、C#、C++、Clojure、D、Erlang、Forth、Fortran、Go、Groovy、Haskell、Io、Java、JavaScript、Lisp、Lua、OCaml、Objective-C、PHP、Pascal、Perl、Pike、Prolog、Python、R、Ruby、Scala、Scheme、Smalltalk、Tcl でフィボナッチ数…

関数合成とオブジェクトサイズとパフォーマンスに関して

日曜日、第2回 スタートHaskell2 に参加してきました。partake.in一番印象的だったのが、Haskell をはじめて 1 ヶ月か 2 ヶ月ぐらいの方が、臆すことなく数十分の枠でプレゼンしていたことでした。 僕は Haskell は 2008 年からなので、えーと足掛け 4 年半…

Haskell の where 節の謎

Haskell の無限リストを勉強していて、標準関数の repeat :: a -> [a] がなんでこの定義で無限リストになるのかが全然理解できないのでメモしておこう。 repeat :: a -> [a] repeat x = xs where xs = x : xs 僕の感覚では、無限リストは再起呼び出しみたい…

Mac で Haskell をするときは Xcode が必要

昨日、ふとんに入りながら Programming Haskell の章末問題*1でも解くかと久々に Let's Note を起動させたら、ずっと HDD がバリバリいっていて作業にならない感じ*2だったので、妻の Mac Book を借りてやろうとしたら、Haskell Platform は Mac だと Xcode …

Eclipse でも Haskell したい #2

Eclipse でも Haskell したい #1 - satosystemsの日記の続き。Haskell には、Perl で言うところの CPAN、Ruby で言うところの Ruby Gems である Hackage というモジュール管理システムがある。cabal というツールを使って、簡単に必要なモジュールをインスト…

Haskell 再入門

今日「入門 Haskell」を購入した。プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (117件) を見るこの本は前から気になっ…

Haskell の lines 関数の代替

Haskell と Scheme の共通点 - satosystemsの日記のコメントで教えてもらいました。 linesWithLineEnd :: String -> [(String, String)] linesWithLineEnd str = loop str [] where loop [] [] = [] loop [] prd = [(reverse prd, "")] loop cs@(c : cs') pr…

Haskell と Scheme の共通点

Haskell の本を再度読み始めてみて、すっかり忘れていたいろいろを改めて認識した。同じ関数型言語だけあって Scheme と同じ考え方が多い。 リストの扱い Haskell も Scheme もリストが超重要なデータ構造なんだけど、どちらも以下のような特徴がある リンク…

明日から夏休み

明日から 5 連休の夏休み。飛行機は 5 時間弱かかるので、本を持っていく。Gauche の本にしようか Haskell の本にしようか。いや悩むまでもなく Haskell の本だな。Gauche の本は携帯には不向きだし。Haskell といえば、Haskell Platform というものを導入し…

Lisp プログラマの考え方がわからない

リストの 2 番目の要素がほしい場合、C プログラマならインデックスでアクセスするんだけど、Scheme にはそんな便利?な機能はないので、 cdr で先頭を除いたリストを取得し car でその先頭を取得する という風に考えるんだと思うんだけど、たとえばリスト l…

Eclipse でも Haskell したい #1

Eclipse の何がすごいかって、保存した瞬間にビルドされてるし、編集時点でエラー箇所がわかるし、超強力なコード補完があるし、超強力なコードスニペットがあるし、超強力なデバッガがあるし、(以下略)。Haskell 開発環境で、その一部でもいいから恩恵に…

インタプリタの使用方法

わかったのでメモしておこう。 ghci hello.hs :r :run main Haskell GHC をインストールすると、勝手に .hs に GHCi が関連付けられるので、ダブルクリックでもいい。ログを見ればわかるけど、実行時に結局コンパイルしてリンクしているので、実際のところ速…

実行も速くないらしい

Haskell とはによると、 大雑把な感じとしては、GHC でコンパイルした Haskell プログラムは Python のプログラムと同じくらいの 速度です。つまり、多くの場合ほとんど問題が無いが、速度が気になるプログラムでは問題になります。 ということだそうだ。Jav…

コンパイルが遅い

import System main = do args <- getArgs putStrLn $ "hello, " ++ args !! 0 ++ "!"このプログラムをコンパイルするのに、2〜3 秒待たされる。勉強を始める前は Haskell はコンパイラもインタプリタもあって、開発中はインタプリタ、最後にコンパイラを使…

!! という演算子の働き

ちょっとだけ時間に余裕ができたので、Haskell を復習しよう。Haskell を勉強していたのは一年半ぐらい前で、日常的に使わないからすっかり忘れてしまっている。昔書いた、コマンドライン文字列を受け取って、それを表示するサンプル。 import System main =…

デバッガはないのかね

Haskell は関数の処理が高級だから、本当にタイプは少なくてすむと思う。だから、やりたいことの方法さえわかっていれば、本当にコードを組むのは早いと思うよ。Haskell と C のクイックソートをそれぞれ見てみようか。これが Haskell。わずか 2 行。 qsort …

Haskell で FizzBuzz

夜中にこつこつ Haskell を勉強しています。 初めての Haskell プログラムは FizzBuzz に挑戦。 ついループで考えてしまう。 うぉ、超難しい。 fizzBuzz :: Int -> [String] -> [String] fizzBuzz 31 ss = ss fizzBuzz n ss = do if n `mod` 3 == 0 && n `mo…

Haskell を勉強中

最近 Haskell を勉強しています。 関数型言語を習得すると、プログラマとして 1 ランク上のステージに立てる、かも知れないといろいろな文献を読み人々の会話を聞き、Scheme と Haskell で悩んで、Haskell を選びました。 C 言語から派生した言語は、すぐに…