Imaginantia

思ったことを書きます

Entries from 2017-09-01 to 1 month

TensorとHom

adjunctionの話じゃなくて。 を整理したかった。 Hom に成るベクトル空間。 双対ベクトル空間 に成るベクトル空間。 でもある。 に対して、 である。 元の空間の基底をとすると、対応する双対ベクトル空間の基底として を取れる。(ここで はベクトル の 成分…

クロージャの実装

const f = _=>{ let a = 0; return _=>a++; }; const b = f(); const c = f(); b(); c(); b と c は異なる a を参照する。これらは実装的に「_=>a++;」と「a を持っている環境」から成っている。はず。あとprototype。 で、これをコンパイル言語で「挙動を再…

分離と統合

概念は、分離するべきなのか統合するべきなのか。多分正解はない。 ただ「関数」は様々な概念を包括しすぎではないだろうか。「全てが関数」というのは聞こえはいいが、考えてみればこれはその操作に本来備わっていたはずの直感を捨てていることに他ならない…

アクセスの概念

「データ構造の一部を操作する」という意味でのアクセスを面白い形で抽象化するのがlensである。 このライブラリは以下の種類のアクセスを扱えるようになっている。 相互変換 (Iso) 片側変換 (もう片方は常に可能) (Prism) 読み出し・書き込み (Lens) 複数の…

hashとunion

hash :: (Hashable a) => a -> Hash 「hashが衝突しない」という仮定の下では、この関数の存在は「Hashは全てのHashableな型たちから成るDisjoint Unionを部分に含む」という意味になるのではないだろうか?そうすると色々と面白いことが考えられる。 実質的…

遅延評価のあるべき姿

遅延評価は非常に興味深いシステムではある。普段通り書いた手続き型のプログラムにおける無駄をシステマチックに省くことができる。 が、本当にそんなにも無駄なコードを書くだろうか? いろんなデータを計算する関数の戻り値の一部しか使わないとして、そ…

structとlinear type

ある大きなデータ構造 T を考える。T のメンバとなっている変数 a の値についての操作を考えたい。 「a を書き換える」ということをしたい場合、純粋世界では必ず構造 T を再構築せざるを得ない。 これでは明らかに負荷が入るため、そこで「他で使われていな…

解説

今までサークル内wikiの/user/phi16/memo/nazoという残念な項目に小さく書きつらねていたような事柄を、blogで書くようにしようと思います 既にあるものは気が向いたら移します