F#

seq と LazyList

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

F# の Project Euler 26 コードを改良した

昨日のエントリの続報です。 F#版改良コード 剰余シーケンス生成関数と、剰余の既出判定関数を一つにまとめました。パフォーマンスに悪影響を与えている疑惑がある 遅延シーケンス操作部分を無くすのが目的です。結果、桁違いに早くなりました。 前回 15 秒…

F# で Project Euler 26 を解いたら遅かった

問題はこれ : Problem 26 ● F# での解答 何故か遅い。うちの環境だと 15秒以上かかる。 ideone.com で試したらやはり同じくらいかかっているようで、タイムアウトでプロセスを kill されてた。 recurringLength に 再帰回数が大きくなるような引数*1を与える…

mutable変数はクロージャに閉包できない

F#

クロージャでかっこよく*1フィボナッチするよ! let makeFiboClosure (a, b) = let mutable t = (a, b) fun () -> let x,y = t in t <- (y, x+y); x makeFiboClosure は、クロージャを作る関数です。評価するとレキシカル変数なタプル t を更新しながら数列…

Mono用 fsharp-mode 補助スクリプト

F#アセンブリを任意のパスに配置して開発できるように補助的な elisp を書きました。A Helper of fsharp-mode (v0.3) for Mono中途半端な感じですが、F# 学習用には使えるんじゃないかと思います。 やってることは 環境変数 MONO_PATH の設定と、実行プログ…

UbuntuとEmacsでF#

意外と簡単に環境つくれました。Ubuntu は 10.04 LTS です。 ♯Monoインストール Ubuntu の apt で入れました。というか入れてありました。version は 2.10.5 なので F# 入れるには十分新しいようです。 ♯make ツール autoreconf をしたら libtoolize が無い…

F# で ProjectEuler18

F#

List メインで解こうと決めてやってみたけど無理してるのが見え見え。Seq にしてやった方がよかったかも? 筋のいいプログラマーなら文字列からのパースをもっと安全なコードにするんでしょうかね。Project Euler 18 解答 (gist) リファクタリング(2011/11/…

関数の型註釈

F#

関数定義の時に型を明示しなくても推論で型を決めてくれるけど、明示したいこともある。 例えば、** 演算子は float 型専用なので他の型では使えない。 let pow x y = x ** y pow "2" "10" //=> error FS0001: This expression was expected to have type fl…

習作:数字混じり文字列ソートをF#で

F#

まだ文法とか半分くらいしか学んでないけど、リスト操作を憶えたので今の知識でどんな風になるか腕試し。 元ネタはどう書く?.org 「数字混じり文字列ソート」 open System let takeNums cs = let rec loop cs n = match cs with | [] -> (n, []) | c::cs wh…