p_tan's blog

勉強日記です。ツッコミ大歓迎

F#

なぜC#ではなくF#を使いたいのか : 構造化分析と関数型プログラミング #fsharp

F#

この記事は F# Advent Calendar 2017 - Qiita の 11 日目の記事です。 本記事では、なぜ自分がC#ではなくF#を使いたいのかを記したいと思います。 この記事で言いたいこと コンピュータシステムの本質とは入力データを出力データに変換することだと思ってい…

レコードの不変条件を強制する方法 #fsharp

F#

この記事は F# Advent Calendar 2017 - Qiita 10日目の記事です。 F#でレコードを使う場合に、型の不変条件を強制したい場合があったので調べました。 例 : Triangle 型 例えば、以下のような辺の長さ a, b , c を持つ三角形を表すレコードがあったとします…

なぜC#よりもF#なのか 2017 #fsharp

F#

以前このような記事を書きました。 なぜC#よりもF#なのか - p_tan's blog 「F# C# 比較」とかでググると比較的上位に表示されるようで、毎日少しずつアクセスがあるようです。 さすがに6年前の記事で内容が古いので、現状での F# を見てみたいと思います。 …

F#でFizzBuzz #fsharp

F#

今更ながらF#でFizzBuzz書いた。http://ideone.com/IlUMc遅延評価による無限データ構造という奴ですな。

Seq.triplewise #fsharp

F#

F# Snippetsに投稿。 Seq.pairwiseの3つ組版。http://fssnip.net/50

シーケンスの要素をグループに分ける Seq.groupBy #fsharp

F#

Seq.groupByはseq中の要素に対応する整数値でseqの要素をグループに分ける。 seq {1..100} |> Seq.groupBy (fun x -> x % 2) // seq [(1, seq [1; 3; 5; 7; ...]); (0, seq [2; 4; 6; 8; ...])] 使用例 // シーケンスをn個毎のサブシーケンスに分ける let sp…

シーケンスの前後の値を見ながらの処理 Seq.windowed [追記] #fsharp

F#

Seq.windowedはseq中の隣接するn要素の配列のseqを返す関数。 > Seq.windowed 3 [1..5];; val it : seq<int []> = seq [[|1; 2; 3|]; [|2; 3; 4|]; [|3; 4; 5|]] 例えば数値のシーケンスの極大値のみをselectする処理は以下のように書ける。 > let SelectLocalMaxs (</int>…

F#で簡易DPLL 修正版

F#

この前の日記で書いた簡易DPLLをちょいと修正、充足可能なときにリテラルへの割り当てを返すようにしてみた。Ideone.com | 9qbbk

なぜC#よりもF#なのか

F#

2017/09/05追記 本記事の内容は古くなったので、新しい記事を書きました なぜC#よりもF#なのか 2017 #fsharp - p_tan's blog 元ネタは id:bleis-tift さんのデブサミ2011の発表です。 デブサミ 2011 で F# について話してきました! - ぐるぐる~C#と比較し…

簡易DPLLアルゴリズムによるSAT Solver

F#

そろそろ関数型言語もやっとかないとね、ということでF#でプログラミングしてみる。 参考文献 プログラミングF# 実践F# 関数型プログラミング入門 SAT Solver ちょっと前に「P=NP証明か?」とか話題になったね。 DPLLアルゴリズム DPLLアルゴリズム - Wikipe…