Rustで内包表記 (List comprehension)

追伸 すごいHaskellの人が、きれいなHaskell風の内包表記のcrateを公開してくれているので、これをおすすめしたい。comprehension - Rust 内包表記マクロ 素のRustには内包表記は用意されていないが、マクロを利用してPython風の内包表記を実現したcrateは幾…

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

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

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の型システムは強い型付けと…

メモ

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

Haskellで数値計算

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

Schemeの継続と環境

前回の記事で、call/cc は呼ばれた時点での継続を取り出してくれるということを書いたのだが、その時点での環境は保存されているのだろうか? 前回の記事に出て来た wayback 関数を少し書き換えて実験してみる。 (define cont #f) (define (capture x) (call/…

Schemeと継続

目次 継続とcall/cc 継続とは call/ccは継続を取り出してくれる 継続はファーストクラスのオブジェクト 時をさかのぼる どこでも取り出せる継続 継続の利用 大域脱出 処理の一時中断と再開 まとめと参考文献 継続とcall/cc 継続とは Schemeでは継続を手続き…

Schemeの紹介と内包表記マクロ

LispとS式 SchemeやCommon LispのようなLisp系言語の強みは強力なマクロ機能にある。LispではプログラムはS式と呼ばれる形式で記述され、それは、Lispがデータとして扱うリストと全く同じ構造を持っている。そのため、LispがデータとしてLispのプログラムを…

vim-plugでSwiftとRustのプラグインを導入

Vim

VimにSwiftとRustのシンタックスカラーリングが欲しかったのでvim-plugでプラグインをインストールしてみた。Vimのプラグインマネージャは色々つくられているけれど、vim-plugはファイル1つで導入でき、記法もシンプルで軽いようです。GitHub - junegunn/vim…

Vimのコマンド

Vim

Vimの紹介 ブログに書けば忘れない気がする。VimはUnix系のOSなら大抵どこでも最初から入っている軽量なエディタ。普通のエディタと同じように使える入力モードと、コマンドを打つことで操作するコマンドモードがあって、iとEscで切り替えられる。最初は奇妙…

VimとAtom

コードを書くのにずっとEclipseとVimを使ってきたのだが、最近Swiftを書いてみたくなったのをきっかけにXcodeも使いはじめた。そうしたら新しいエディタも色々と試してみたくなった。 Sublime Text、Light Table、Brackets、Atomなどなど、Vimのかわりに使っ…