Haskell

Haskellで名前付き引数やデフォルト引数に近いこと

名前付き引数やデフォルト引数とは 幾つかの言語では、関数の引数に名前を付けて、引数の順番ではなく名前で値を指定することができる。また、引数があたえられなかった時に使用されるデフォルトの値を設定して置くこともできたりする。 func <- function(a,…

Haskellのスペースリークとプロファイリング

目次 プロファイラ 全体的なレポートを採る メモリ消費を詳しく調べる スペースリークなどへの対応 末尾再帰への書き換え 実際のリスト生成の回避 正格評価版$!とseq 正格フィールド BangPatterns StrictとStrictData プロファイラ プログラムをチューニング…

Haskellで数値計算 常微分方程式の陰的解法編

以前の記事で陽的Runge-Kutta法を書いたことがあったが、今回は常微分方程式の初期値問題を陰的Runge-Kutta法で解いてみたい。 Implicit Runge-Kutta法 色々な方程式を解いてみよう 硬い方程式 アトラクタなど Implicit Runge-Kutta法 常微分方程式に初期値…

Haskellで数値計算 線形代数編

BLASとLAPACK 数値計算では、連立線形方程式に帰着させられる問題はとても多い。また、固有値問題は分野を越えて応用範囲が広い。そのため、これらの問題を扱うための線形代数ライブラリは古くから活発に開発されてきた。中でも代表的なものは基礎的な行列、…

Free Monadで言語内DSLをつくろう

抽象構文木の構築とその評価の分離 インタプリタやコンパイラでは最初に、コードの文字列を構文解析して抽象構文木 (AST) を構築する。その表現形式はDAGやSSAなどに変化して行くことも多いが、基本的にはこれらの中間表現に対して様々な最適化がほどこされ…

Haskellの代数的データ型

多相性の実現 Haskellでは型クラスによってアドホック多相が実現でき、型変数によってパラメータ多相が実現できる。また、部分型付けは型変数に対して型クラス制約を課すことで近しいことが実現できる。個人的な印象では、Haskellの型システムは強い型付けと…

メモ

Haskellのモナドの話には圏論の言葉がよく出てくるのですが、ざっくりとした理解しかできていません。自分の理解をまとめるためにメモを残します。間違っているかもしれないので、鵜呑みにはしないでください。圏論はなんとなく集合論をさらに抽象化したよう…

Haskellで数値計算

普段はJavaやFortranで数値計算をしているのだが、使える範囲でHaskellも使ってみたくなった。宣言的に書けるのでコードが簡潔になることや、副作用が厳格に管理されている上に、静的な型付けがしっかりしていてコンパイラが賢いので、バグが見つけやすいこ…