2013-01-01から1年間の記事一覧
いげ太さんがときどきぼやいてたかと思いますが(追記: 不正確でした。いげ太さんからのコメントは下に)、「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学びたてのころは、どういう発…
個々の型に適合する関数群の実装をレコードのいちインスタンスとして渡してるわけね。サンプルでは、intならint、floatならfloat用の実装を用意している。これって目的は果たすのかな?
前回の記事のど頭のこれ type 'a Num = { ... } はジェネリックレコード型の定義のようだ。'a listとか'a optionみたいに'a Numを定義している。 ところで、Num<'a>と書くのと同じなんだろうけど、そう書かない理由は何だろう。何か使い分けでもあるのかな。
.NETのCLRに高階ジェネリクス(型クラス、高カインド)を!という要望はMSから断られているわけだけども。 回答にある「Steffenがコメント欄に書いたようなやり方でエンコードできるよ」というのが気になった。 時間を見つけてこのコードを勉強してやろう。 …
日にちを逆から計算するというのは早めに気づいたのだけど、Largeを解けるようにするのにえらく時間がかかった。 ループをk回ずつまわさないようにするために、消費期限が長いものから順に何杯ずつ飲むのかを計算して掛け算する方針。
読みにくいからやめてほしい。 自己満足以外に実用的な意味があるのかどうか。 そもそも、セクションとかflipとかを使いまくらないと実現できないわけでしょう? unlambdaやlazy kは実用言語じゃないでしょう?
http://qiita.com/items/709d61dff282cff7a890 http://qiita.com/items/463311ff1ce4dd2cc943
http://qiita.com/items/84255ac417ef25069a3b http://qiita.com/items/7385db8cce051cb499d7
haskellグループなのにF#のエントリ。大目に見てね。 F#の練習に http://qiita.com/items/d819d1e5f2378317511e の問題を解いてみた。 (横浜へなちょこプログラミング勉強会には参加したことないですが……横からすみません) http://qiita.com/items/80c2c22…
何度も書いているのは、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>…
コードは、「セクシー素数ベンチ(の非効率な実装)」を移植したもの。 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…
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 …