星にゃーんのブログ

ほとんど無害。

技術メモ

継続モナドで立ち向かうローンパターンとEither地獄

Haskellでファイルなどのリソースの解放を保証するテクニックとして、ローンパターン(Loan Pattern)がある。withFile :: FilePath -> IOMode -> (Handle -> IO r) -> IO rなどがその例だ。 ローンパターンによる関数を複数使ったプログラムは、無名関数の…

世の中間言語を集める

個人的なプロジェクトとして、コンパイラの中間言語の設計に取り組んでいる。 今できてるのはラムダ計算に毛が生えてコード生成に向いてるセマンティクスを持つみたいなやつで、『星を継ぐもの』に登場するコリエルというキャラクターから名前をもらってkori…

Homebrewで他のformulaから依存されていないformulaを列挙する

brew listでインストール済みのすべてのformulaを列挙する。 xargs -P ...でそれぞれのformulaについて、そのformulaに依存しているインストール済みのformulaの数を数える。 grep " 0"で依存されていないformulaのみを取得する。 $ brew list | xargs -P 10…

Coq 8.7.1でSoftware Foundationsを読もうとしてハマったメモ

Software FoundationsのProgramming Language FoundationsのEquiv.vをProof Generalで読み込んだら以下のようなエラーが出た。 Error: The file /Users/yuya/dev/src/local/softwarefoundations/plf/Maps.vo contains library Top.Maps and not library Maps…

CのVariable-length array

C99では, 実行時に配列の長さを指定できる機能が追加された. #include <stdio.h> int foo(int n) { int array[n]; int array[0] = 1; int array[1] = 1; for (int i = 2; i < n; i++) { array[i] = array[i-1] + array[i-2]; } return array[n-1]; } sizeofは実行時に</stdio.h>…

「最新コンパイラ構成技法」でハマったところのツイまとめ 5/3

SML/NJで最新コンパイラ構成技法のソース読み込んだら(CMで)、"unbound structure: TextIO in path TextIO.instrem"とか言われて詰んだ— こうの (@takoeight0821) 2017年5月3日 sources.cmに$/basis.cmを追加したらうまくいった(あと、smlnj-lib.cmも$/smlnj…

Roswell scriptでshebangツライときの覚え書き

ANSI Common Lispではshebangの存在は考慮されない。 しかし、Roswell scriptのデバッグをSlimeでしていると、shebangでリードエラーが起きてツラくなる。 その回避方法。 Roswellは起動時に、$HOME/.roswell/init.lispを実行する。 また、ros:ignore-sheban…

Elixirで二重数を実装して自動微分するまで

最近プログラミングElixirを読んでいる。 実際にプロジェクトを作る流れを示した練習課題があったり、ライブラリ事情だったり、実用性の高いガイドブックのような形式で、リファレンスじみた退屈さがなくて読みやすい。 Elixir言語だけでなく、周りのエコシ…

Scheme 継続

もうひとつのScheme入門 16. 継続を写経した。 「継続」は、計算において必ず存在する。 しかし、明示的に扱われることが少ない。 例えば、 (* 3 (+ 1 2)) のような計算があるとき、(+ 1 2)を評価した後の残りの計算は、(* 3 _)である。 この部分を継続と呼…