2013-01-01から1年間の記事一覧

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回ずつまわさないようにするために、消費期限が長いものから順に何杯ずつ飲むのかを計算して掛け算する方針。

Haskellのポイントフリー

読みにくいからやめてほしい。 自己満足以外に実用的な意味があるのかどうか。 そもそも、セクションとかflipとかを使いまくらないと実現できないわけでしょう? unlambdaやlazy 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…

サンク メモ

Haskellで書いてもしょうがないのであとでF#にするか? 正格評価の言語だとunitがアウトだなきっと。最初から() -> a で渡してやらないと。 newtype Thunk a = T (() -> a) unit :: a -> Thunk a unit x = T (\y -> x) eval :: Thunk a -> a eval (T x) = x …