F#

情報隠蔽とモジュールとシグネチャファイル (F# Advent Calendar 2016)

F#

いまさらですが、2016年12月のF# Advent Calendar記事の締め切りに間に合わなかったこともあり、アクセス数が少ないので、ここで再紹介します。 http://qiita.com/matarillo/items/8444db7b97abd29194c2 シグネチャファイルを書くことで、型の実装を隠蔽する…

もしミスチルがF#だったら

F#

love : 'Ego -> 'Ego -> seq<int> when 'Ego : comparison 記念に。</int>

多相リテラルはないけど、演算子オーバーロードとユーザ定義型変換とカスタム数値リテラルとジェネリック単位元と

F#

この記事はF# Advent Calendar 2015の9日目の記事です。 記事の発端は、id:m-hiyama さんの3つの記事です。 http://d.hatena.ne.jp/m-hiyama/20151130/1448843034 http://d.hatena.ne.jp/m-hiyama/20151202/1449016930 http://d.hatena.ne.jp/m-hiyama/20151…

演算子オーバーロードとユーザ定義型変換とカスタム数値リテラルとジェネリック単位元と

F#

(12/8追記: 檜山さんの新しい記事を受けて、別バージョンを書きました。https://gist.github.com/matarillo/d9861bcce64b4b6ae4da 明日には新しいブログエントリーを書くつもりです。) http://haskell.g.hatena.ne.jp/matarillo/20151202/1449027369の続き…

Re: コンピュータは「掛け算は足し算とする」を理解できるか

F#

行列計算はともかくとして、min-plus半環そのものを定義します。 複数のプリミティブ数値型に対応するには?と読みました。 新しい演算子、たとえば ?+と?* を作る方法も考えられますが、まずはジェネリクスで対応。 F#には型クラスがないので、型に応じた計…

Re: お手軽で実用的なジェネリックスへの道は遠い

F#

「TypeScriptジェネリックス:可能性が見えると不満がつのる」において、クラス定義や関数定義に型パラメータを渡せるだけでは、ジェネリック・プログラミングは難しいと述べました。そのときの例題はリストの総和だったのですが、より簡単な累乗(ベキ乗、p…

本質ではない。

F#

F# 不況側は何かと「C# はここがダメ!F# はC# よりイイ!」って言うけど、F#の成果がぜんぜんアピールされてないというのは真実。 ほかのはやりの言語は自身をわざわざC# なんかと比較したりしないし、そういうこというのF# ぐらいしかないよね。 F#からWin…

F#のWebアプリケーションフレームワーク

F#

http://fsharp.org/guides/web/ に載ってる中でちょっと気になったやつをメモ。 Suave.IOはノンブロッキングでクロスプラットフォーム。ほうほう。結構作りこまれてる様子。 http://suave.io/ type SuaveTask<'a> = Async<'a option> type WebPart = HttpCon…

演算子のオーバーロード #5(完結編)

F#

ちょっと間が空いた。 さて、ここまでを踏まえれば、最初の記事に載せた http://stackoverflow.com/questions/11150947/f-overloaded-operater-with-floats-not-working-with-other-floats/11152288#11152288 はほぼ理解できる。 組み込みのfloatとユーザー…

演算子のオーバーロード #4

F#

グローバルレベルで定義された演算子が演算子のオーバーロードを隠してしまう。それはわかった。それならそれで、グローバルレベルで定義された演算子は多相(ジェネリック)にできないのだろうか。 結論から言うとできる。ただし気を付けなければならないこ…

演算子のオーバーロード #3

F#

さて、?<-はいったん置いておいて、演算子のオーバーロード解決を勉強した。 F# の演算子定義は2通りのパターンがある。 1つは(C#と同様に)クラスなどのスタティックメンバーとして書くもの。 type MyRecord = { x: int; y: int } with static member (+) (l…

演算子のオーバーロード #2

F#

F#の ?<- 演算子(動的プロパティに値を設定する演算子)はわりとキモいことがわかってきた。 まずはこんな感じでグローバルな演算子を定義してみる。 let (?<-) (d:#IDictionary<'K, 'V>) k v = d.[k] <- v まず、キーとして適当な判別共用体を食わせてみる…

演算子のオーバーロード #1

F#

http://stackoverflow.com/questions/11150947/f-overloaded-operater-with-floats-not-working-with-other-floats/11152288#11152288 F#の ?<- 演算子は「動的プロパティに値を設定する演算子」なんですが、なんでそれがここに? しかも、 type Overloads =…

Minority's hello, worldにF#で挑戦

F#

CodeIQにMinority's hello, worldという問題が出ていました。 問題が見れなくなっているので引用すると、こういうもの。 ■問題の概要 「hello, world」と出力するプログラムを提出して下さい。 提出されたプログラムで使われている文字を、全挑戦者について…

貧者の型クラス

F#

去年、こんなのをメモしてた。 http://haskell.g.hatena.ne.jp/matarillo/20130524/1369369774 http://haskell.g.hatena.ne.jp/matarillo/20130527/1369636675 これってオダスキー先生のこれ↓がベースなのか! http://lampwww.epfl.ch/~odersky/talks/wg2.8-…

F#の立ち位置

F#

いげ太さんがときどきぼやいてたかと思いますが(追記: 不正確でした。いげ太さんからのコメントは下に)、「F#はなーんかMSに冷遇されてねえ?そのせいか、C#からF#に乗り換える人も少なくね?」みたいな話があります。 それは正しいといえば正しいのですが…

関数適用と関数合成

では、こんな関数があったとき replicate 2 (product (map (*3) (zipWith max [1,2] [4,5]))) 関数合成をして、まっとうな記述をするとこう書けるらしい。 replicate 2 . product . map (*3) $ zipWith max [1,2] [4,5] Haskell学びたてのころは、どういう発…

前回の記事

F#

個々の型に適合する関数群の実装をレコードのいちインスタンスとして渡してるわけね。サンプルでは、intならint、floatならfloat用の実装を用意している。これって目的は果たすのかな?

ジェネリックレコード型

F#

前回の記事のど頭のこれ type 'a Num = { ... } はジェネリックレコード型の定義のようだ。'a listとか'a optionみたいに'a Numを定義している。 ところで、Num<'a>と書くのと同じなんだろうけど、そう書かない理由は何だろう。何か使い分けでもあるのかな。

Poor Mans' Type Classes

F#

.NETのCLRに高階ジェネリクス(型クラス、高カインド)を!という要望はMSから断られているわけだけども。 回答にある「Steffenがコメント欄に書いたようなやり方でエンコードできるよ」というのが気になった。 時間を見つけてこのコードを勉強してやろう。 …

Google Code Jam Japan 2011 予選問題B

F#

日にちを逆から計算するというのは早めに気づいたのだけど、Largeを解けるようにするのにえらく時間がかかった。 ループをk回ずつまわさないようにするために、消費期限が長いものから順に何杯ずつ飲むのかを計算して掛け算する方針。

ビットボンバーマン(第8回オフラインリアルタイムどう書くの問題)

F#

http://qiita.com/items/709d61dff282cff7a890 http://qiita.com/items/463311ff1ce4dd2cc943

バス代の計算(第9回オフラインリアルタイムどう書くの問題)

F#

http://qiita.com/items/84255ac417ef25069a3b http://qiita.com/items/7385db8cce051cb499d7

ポーカーの役判定(第10回オフラインリアルタイムどう書くの参考問題)

F#

haskellグループなのにF#のエントリ。大目に見てね。 F#の練習に http://qiita.com/items/d819d1e5f2378317511e の問題を解いてみた。 (横浜へなちょこプログラミング勉強会には参加したことないですが……横からすみません) http://qiita.com/items/80c2c22…

HaskellとF#の適当な比較

サンク メモ3

F#

何度も書いているのは、http://d.hatena.ne.jp/itchyny/20130209/1360417348を読んだから。 let rec foldr = T (fun _ (k : Thunk<Thunk<'a> -> Thunk<'b> -> 'b>) (z : Thunk<'b>) (list : Thunk<TList<'a>>) -> let rec go xs = match eval xs with | Nil -> z | Cons (y, ys) </tlist<'a></thunk<'a>…

F#の範囲演算子が遅かった

F#

コードは、「セクシー素数ベンチ(の非効率な実装)」を移植したもの。 open System.Linq let isPrime n = Enumerable.Range(2, n - 2) // {2..n-1} |> Seq.forall (fun i -> n % i <> 0) let sexyPrimes n = Enumerable.Range(9, n - 8) // {9..n} |> Seq.m…

サンク メモ2

F#

type Thunk<'a> = T of (unit -> 'a) let eval (T x) = x () let apply f (x : Thunk<'a>) = T (fun _ -> (eval f) x) let one = T (fun _ -> 1) let two = T (fun _ -> 2) let add = T (fun _ x y -> eval x + eval y) let three = apply (apply add one) t…

C#よりF#が向いている領域って?

F#

Stack Overflowに質問されていた、「In what areas might the use of F# be more appropriate than C#?」の回答を翻訳してみた。 simon cousinsの回答 私は、とあるエネルギー会社向けに、発電所のポートフォリオに関する国の発電スケジュールと取引ポジショ…

F#のコンピュテーション式

F#

ってHaskellのdo記法なんだね。