bluebird

fisher yates アルゴリズムで配列シャッフル

ローカルリポジトリを掃除していたらFisher-Yates法 の実装が見つかりました。 コミットのついでに紹介します。このアルゴリズムを使うと配列が O(n)時間 でシャッフル出来ます。 local fun swap xs i j = (* swap xs[i] xs[j] *) let val tmp = A.sub (xs, …

SMLでZipListを作る

本物のプログラマはHaskellを使うで紹介されているZipListを定義してみました。 この型を使うと、zipWithN をその場で組上げることが出来ます。(といっても最初にタプルのコンストラクタ渡すんですが) 型の定義 まず *モト* となる型を定義します。 signatur…

SMLでApplicativeを書く

コードはcodeplexに置いてあります。 (sml/njでuse "applicative.use"; するとApplicativeなOptionが使えます)) http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Applicative.html を参考にしました。 とりあえず下のレイヤから書いて…