2018-01-01から1年間の記事一覧

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

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

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

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

Vimのおすすめプラグイン紹介

Vim

プラグインマネージャ プラグインを探す おすすめプラグイン vim-airline YouCompleteMe ALE fzf / fzf.vim プラグインマネージャ vim-plug https://github.com/junegunn/vim-plugVimではプラグインのインストールや読み込みの管理などを行うプラグインマネ…

Haskellで数値計算 線形代数編

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

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

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

Haskellの代数的データ型

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