そろそろFreeモナドに関して一言いっとくか

Freeモナドはすごい。Haskellを書いていて、「特殊化された処理を記述するモナドが簡単に作れたら便利だろうなー」と思ったことはないだろうか?簡単に作れるのである、そう、Haskellならね。これが、純粋なFreeモナドの定義である。 data Free f a = Pure a…

Lazy Kのクワインを約半分に短縮

http://d.hatena.ne.jp/fumiexcel/20120402 のクワインを46085bytesから25677bytesに短縮した。こっちが古いコード。 (lazy-def '(++ self xs ys) '(s (null? xs) (o (cons (car xs)) (self (cdr xs))) ys)) (lazy-def 'syms '(cons 115 (cons 96 (cons 107 …

文字列リテラルが無いLazy Kで黒魔術も力技も使わずにクワイン

Lazy Kで素直にクワインを作ったときのメモ。 Lazy Kとは Lazy Kは、あのHaskellと同じ純粋(Pure)関数型(Functional)言語である。`fxで、xにfを適用する。 関数はi、k、sの3つ。 `ix=x ``kxy=x ```sxyz=``xz`yz 入出力は、0~255までのチャーチ数のリストで表…

Haskell Advent Calendar 2011 20日目

Haskell Advent Calendar 2011 20日目は、Haskoreというライブラリの紹介です。Haskoreとは?Haskellによって書かれた音楽を扱うためのライブラリです。CSound、MIDI、SuperColliderに対応しています。 MIDIを使用するものとして話を進めていきます(他の二つ…

Pythonで「お題:ある金額になるコインの組み合わせ」をやってみた

お題:ある金額になるコインの組み合わせをPythonでやってみた。 バックトラックが一番簡単か。 「順序が違うだけのものは一つの組み合わせとする」は「各列をソートしたときに重複しない」と同じ。探索する候補が列の最後の値を下回らない([x for x in coin…

「お題:文字列を先頭から見て同じところまで除去」をPythonで作ってみた

「お題:文字列を先頭から見て同じところまで除去」http://d.hatena.ne.jp/fumokmm/20110812/1313138407 をPythonでやってみた。itertoolsにほぼ同じことを行う関数(itertools.dropwhile)があったので数分でできた(ドヤ顔) #!/usr/bin/env python # coding: …