komorebikoboshiのブログ

プログラミング記事(趣味レベル)が多め。

F#

F#でズンドコした改造版

let zundokoSeq = seq{ let rand = new System.Random () while true do let x = rand.Next(2) (* 0がズンで1がドコ *) if x = 0 then printfn "ズン" else printfn "ドコ" yield x } zundokoSeq |> Seq.windowed 5 |> Seq.takeWhile (fun x -> x = [|0;0;0;…

F#でズンドコした

今更感あるけどF#でズンドコした。 type Zundoko = Zun | Doko (* F# 4.0より前のバージョンの場合 let rand = new System.Random () *) let rand = System.Random () let randomZunDoko () = if rand.Next(2) = 0 then printfn "ズン"; Zun else printfn "…

F#で謎カウンターを作るとき、let mutableでなくrefを使う(使っていた)のはなぜ?

これはF# Advent Calendar 201419日目のエントリーです。前日のエントリーはid:u_1rohさんの継続は力なり #FsAdvent - かたちづくりでした。 さて、タイトルに謎カウンターなる謎の言葉が出てきますが、クロージャについて調べたことのある人はなんとなくピ…

VS2013でFsYacc、FsLexを使う

Visual Studio 2013*1でFsYaccとFsLexを使うには、基本的に http://stackoverflow.com/questions/19781156/using-fslex-yacc-in-vs2013 の通りにすればいいのですが、2つほどハマったところがあったのでそれを書いておきます。 FsYacc、FsLexが参照するFShar…

FParsecでパーサコンビネータのお勉強

はじめに この記事はF# Advent Calendar 2013の18日目のです。ひとつ前の記事は@kos59125さんのDeedle で遊ぼう - 捨てられたブログです。 パーサコンビネータとは 文字列の構造を解析するプログラムをパーサと言いますが、パーサコンビネータはその中の一種…

Seq.existsのお話

えーと、SORAHANEの次回作のティザーサイトが公開されましたね。 SORAHANE -ソラハネ-(リンク先18禁) とりあえず英語苦手なんで日本語情報を待ちます(お まだおまけシナリオやり終えてないんだよなあ。 それはおいといて。 F#にはSeq.existsという*1「シ…

F#のfunction式への苦手意識が少しなくなったかもしれない

F#のmatch式、便利ですね! let rec fib n = match n with | 0 -> 0 | 1 -> 1 | x -> fib (x - 1) + fib (x - 2) こんな感じでパターンマッチが簡単に書けます。 さて、match式とよく似たものにfunction式というものがあります。 let rec fib = function | 0…

学ぶ!コンピューテーション式(3) ~return、return!

とりあえず分かるところから。 はじめに この記事はコンピューテーション式の解説記事ではありません。以下学ぶ!コンピューテーション式(1) ~let!とBind - komorebikoboshiのブログと同文です。 本編に入る前に このブログにもコメントしていただいたこと…

学ぶ!コンピューテーション式(2) ~そもそもコンピューテーション式ってなに?

はじめに この記事はコンピューテーション式の解説記事ではありません。以下学ぶ!コンピューテーション式(1) ~let!とBind - komorebikoboshiのブログと同文です。 コンピューテーション式とは 式です。 ……というボケで終わるわけにはいかないのですが。こ…

学ぶ!コンピューテーション式(1) ~let!とBind

はじめに 最初に御注意を。 このエントリーはコンピューテーション式の解説記事ではありません。komorebikoboshiがコンピューテーション式について勉強して、考えたことを書き留めていく記事になる予定です。よってところどころに間違った内容が入る可能性が…

「モナドのすべて」のMaybeモナドの例をF#で

All About MonadsにはMaybeモナドのサンプルとしてクローン羊の例が載っています(http://www.sampou.org/haskell/a-a-monads/html/meet.html#example1)。これをF#で書いてみました。もうすでに誰かやってるとは思いますが。 普通にやる まずSheep型を定義…

F#の文字列操作関数を調べてみた

F#の文字列操作関数(Microsoft.FSharp.Core.Stringモジュール)を調べてみた。 関数 length 文字列の長さを返す。 String.length "あいうえお" (* => 5 *) map 文字それぞれに関数を適用した新しい文字列を作る。 String.map (fun x -> System.Char.ToUpper…