ポーカーの役判定(第10回オフラインリアルタイムどう書くの参考問題)
haskellグループなのにF#のエントリ。大目に見てね。F#の練習に http://qiita.com/items/d819d1e5f2378317511eの問題を解いてみた。...
View Articleバス代の計算(第9回オフラインリアルタイムどう書くの問題)
http://qiita.com/items/84255ac417ef25069a3bhttp://qiita.com/items/7385db8cce051cb499d7
View Articleビットボンバーマン(第8回オフラインリアルタイムどう書くの問題)
http://qiita.com/items/709d61dff282cff7a890http://qiita.com/items/463311ff1ce4dd2cc943
View ArticleHaskellのポイントフリー
読みにくいからやめてほしい。 自己満足以外に実用的な意味があるのかどうか。 そもそも、セクションとかflipとかを使いまくらないと実現できないわけでしょう? unlambdaやlazy kは実用言語じゃないでしょう?
View ArticleGoogle Code Jam Japan 2011 予選問題B
日にちを逆から計算するというのは早めに気づいたのだけど、Largeを解けるようにするのにえらく時間がかかった。ループをk回ずつまわさないようにするために、消費期限が長いものから順に何杯ずつ飲むのかを計算して掛け算する方針。
View ArticlePoor Mans' Type Classes
.NETのCLRに高階ジェネリクス(型クラス、高カインド)を!という要望はMSから断られているわけだけども。回答にある「Steffenがコメント欄に書いたようなやり方でエンコードできるよ」というのが気になった。時間を見つけてこのコードを勉強してやろう。(おまけ)...
View Articleジェネリックレコード型
前回の記事のど頭のこれtype'a Num={ ... }はジェネリックレコード型の定義のようだ。'a listとか'a optionみたいに'a Numを定義している。 ところで、Num<'a>と書くのと同じなんだろうけど、そう書かない理由は何だろう。何か使い分けでもあるのかな。
View Article前回の記事
個々の型に適合する関数群の実装をレコードのいちインスタンスとして渡してるわけね。サンプルでは、intならint、floatならfloat用の実装を用意している。これって目的は果たすのかな?
View Article関数適用と関数合成
では、こんな関数があったとき replicate 2 (product (map (*3) (zipWith max [1,2] [4,5]))) 関数合成をして、まっとうな記述をするとこう書けるらしい。 replicate 2 . product . map (*3) $ zipWith max [1,2] [4,5]...
View ArticleF#の立ち位置
いげ太さんがときどきぼやいてたかと思いますが(追記: 不正確でした。いげ太さんからのコメントは下に)、「F#はなーんかMSに冷遇されてねえ?そのせいか、C#からF#に乗り換える人も少なくね?」みたいな話があります。...
View ArticleOKWaveの質問
Graham Hutton著「プログラミングHaskell」の第8章関数型パーサーを勉強しています。 本の中にあるソースコードではdo記法などが使えないため、動きません。 サポートページにプログラムがあります。そのプログラムの意味がよくわかりません。 教えていただけないでしょうか。プログラミングHaskellでHaskellを学んだ私が来ましたよ。...
View Article貧者の型クラス
去年、こんなのをメモしてた。http://haskell.g.hatena.ne.jp/matarillo/20130524/1369369774http://haskell.g.hatena.ne.jp/matarillo/20130527/1369636675これってオダスキー先生のこれ↓がベースなのか!http://lampwww.epfl.ch/~odersky/talks/wg2.8-bo...
View Article遅延評価とfoldr/foldl
Haskellの遅延評価のイメージは「まず式を立てる(サンクを作る)けど、値の評価はまた別の話」。foldrは foldr f acc [x0, x1, x2, x3, ... , xn] = x0 `f` (foldr f acc [x1, x2, x3, ... , xn]) = x0 `f` (x1 `f` (x2 `f` (x3 `f`...`f` (xn `f` acc) ... )))...
View Articleモナド構文糖
モナドが便利で、モナド構文糖が便利だってことには特に異論がないんだけど、 それならそれでHaskellのdo-returnみたいに逐次実行に似せるほうが絶対にいいと思う。 そうでなければ、もっとこう、bindとかunitとかそういう語彙を前面に出してほしい。つまり、Scalaのように、for-yieldとかflatMapというリスト中心の語彙でモナドを扱うのは、どう考えてもキモイ。...
View Articlekenokabeさん
kenokabeさんは、自説の組み立て方、参照する先行研究や書籍が普通ではないので突っ込まれやすいにも拘わらず自説が正しいという態度を崩さない、知人だったらわりと面倒なお方だなという印象なんだけど、ここに書いてたことにはそんなに違和感ないな。http://kenokabe-techwriting.blogspot.jp/2015/04/amazon102-93.htmlむしろ書評を書いた人が、ラムダ...
View ArticleMinority's hello, worldにF#で挑戦
CodeIQにMinority's hello, worldという問題が出ていました。問題が見れなくなっているので引用すると、こういうもの。■問題の概要「hello, world」と出力するプログラムを提出して下さい。 提出されたプログラムで使われている文字を、全挑戦者について集計します。 各文字には「(その文字を利用した挑戦者の人数)の2乗」というポイントが割り当てられます。...
View Article演算子のオーバーロード #1
http://stackoverflow.com/questions/11150947/f-overloaded-operater-with-floats-not-working-with-other-floats/11152288#11152288F#の ?<-演算子は「動的プロパティに値を設定する演算子」なんですが、なんでそれがここに?...
View Article演算子のオーバーロード #2
F#の ?<-演算子(動的プロパティに値を設定する演算子)はわりとキモいことがわかってきた。まずはこんな感じでグローバルな演算子を定義してみる。let(?<-)(d:#IDictionary<'K, 'V>) k v = d.[k]<- v まず、キーとして適当な判別共用体を食わせてみる。typeMyUnion=A|B|Cofintlet testUnion =let...
View Article演算子のオーバーロード #3
さて、?<-はいったん置いておいて、演算子のオーバーロード解決を勉強した。F# の演算子定義は2通りのパターンがある。1つは(C#と同様に)クラスなどのスタティックメンバーとして書くもの。typeMyRecord={ x: int; y: int}with static member (+)(left: MyRecord, right: MyRecord)={ x = left.x +...
View Article
More Pages to Explore .....