F#マスターへの道内検索 / 「TDDの実践」で検索した結果

検索 :
  • TDDの実践
    テスト駆動開発の練習 テストしながら作るということ  アジャイルとかXPとか言われてもう久しいのですが、日本の開発現場にはまだまだ浸透していないようです。僕も仕事でやらしてもらうのは不可能っぽいんで、一人でやってみました。お題は、アジャイル開発の例でよく使われる「ボーリングのスコア計算」です。 ボウリングのスコア計算ルール  ボウリングをやったことをある人は分かると思いますが、あの計算方法は他に類を見ない独特のもので、それがある意味単純なボウリングという競技を熱くさせている要因に思えます。それは以下のようなものです。 基本的に投げるごとに倒したピンの数の和がスコア ただし、1投目で倒せなかったピンがあったら、2投目を投げる。 1投目で倒したピンの数が10なら、ストライクとなり、その次、その次の次に倒したピンの数をストライクの点に加算する。 1投目がストライクでなく、2投目で倒...
  • メニュー
    ...shadowing TDDの実践 二桁の数の秘密 Win8・Winタブ・VS11 動的計画法 エッシャーの爬虫類 ペンローズ・タイル イメージPDFファイルの処理 型から始めるプログラミング 姉妹サイト 教えて!アロイ人! Software Foundations日本語版 取得中です。 ここを編集
  • Add展開編
    Add/Subtract/Multiply/Divide展開編  これらの関数は四つありますが、見て分かるように中の演算子が違うだけで内容的にはほぼ同じものです。なので、代表としてAddを展開し、その結果を見て他の三つも展開することにしましょう。  関数展開の基本は、内側から、前からの順番に行います。ただ、どの順でやってもできないということはなく、途中の分かりやすさが若干違うだけのことも多いので、あまり展開順にこだわらず、どこからやっても展開できるような基礎体力をつけておくことも重要です。  というわけで、まな板の上にAdd関数の定義を載せます。VisualStudioを使っている人は、StateBuilderやGetState、SetState、StatefulFunc、Runなどの定義と一緒にソース上に貼り付け、コンパイルエラーが出ない状態にしてください。。 l...
  • StatefulFuncの意味的理解
    StatefulFunc/StateBuilderとは何なのか  これまで書いてきたことを読んでいただけると、StatefulFunc/StateBuilderについて「入力してコンパイルすると確かに動くけど、なぜどのように動いているかさっぱりわからない」という状態は脱出できると思います。しかしこれは単に機械が動く仕組みを理解できただけで、その設計意図や目的が理解できたわけではありません。第一、普通のプログラムを読むときにこのような読み方はしません。変数の意図などを考え、その値がどのように使われた結果、どこでどのようなことが起こって結果が発生しているのか、という道筋でプログラムを解釈するのが普通だと思います。  ここでは、StatefulFunc/StateBuilderが、意味的にどのように動いているかを解説したいと思います。とはいえ、StateffuiFunc/StateBuil...
  • 丸めワークフローはモナド?
    丸めワークフローはモナドなのか?モナドとワークフローの境界を探る  Haskellでいうところのモナドのお約束は 型構築子 Return Bind という三つ組みで、それぞれに満たすべき性質があります。 このうち、下の二つはF#のワークフローでも必須のものなのですが、最初の型構築子については必ずしも要求されていないところがあります。 それがよく分かるのが、「Programming F#」の「丸めワークフロー」です。 type ReoundingWorkflow(sigDigs int) = let round (x float) = Math.Round(float x, sigDigs) member this.Bind(result float, rest float - float) = let result = roun...
  • 用語の問題
    用語の問題-コンピュテーション式、ワークフロー  「モナド」という言葉の意味、というか「何を指してモナドといっていいのか」の範囲がぼんやりと分かったような気持ちになるまで、僕は何ヶ月も要しましたが、今また、僕は同じような問題に頭を抱えています。  ワークフロー、計算式、コンピュテーション式、シーケンス式、計算式ビルダー、カスタムワークフロー、非同期ワークフローなど、ワークフロー周辺には怪しげな言葉がたくさん渦巻いています。これらの言葉はそもそもそれぞれ何を意味しているものなのでしょうか。  そもそも「Programming F#」で「計算式」という言葉を見たときから、「なんだか『食パン』みたいで嫌な用語だなぁ」と感じたのですが、「Programming F#」「実践F#関数型プログラミング入門」の両方を並べて読み比べても、いまだに「計算式」という言葉の意味するものというものが掴みきれ...
  • while展開編
    StatefulFuncはなぜ動くか while展開編(オマケ) 1.whileを使ったループの導入  StateBuilderにはWhileメソッドも実装されており、計算式の中にwhileループを記述できます。whileループはその構造上破壊的な代入が伴うのであまり関数型プログラミングで使われることがありませんが、せっかくなのでこれも試してみましょう。などと調子よく書き始めてから色々試したのですが、想像以上にイバラの道でした。ほとんど参考になる情報がなく、あっても間違っていたりで何日も悩まされました。  そんなこんなで書いたのがこのclaculatorActionsです。 let GetTotal = StatefulFunc (fun (total, history) - total, (total, history)) let calculatorActions =...
  • リストとの類似
    ワークフローとリスト処理  ワークフローの構造、特にBindの中身をじっと見ていると、どこかリスト処理を髣髴とさせる構造が見えてきます。今回、その辺の空気がどのあたりから感じられるのかを探ってみたいと思います。 1.Bindの中身  すでに何度も貼ったコードですが、もう一度よく見てみましょう。 member this.Bind( result StatefulFunc state, a , restOfComputation a - StatefulFunc state, b ) = StatefulFunc(fun initialState - let result, updatedState = Run result initialState Run...
  • Win8・Winタブ・VS11
    WindowsタブレットとF#とWindows8とVS11と私 Acer Iconiatab W500とWindows8 こんな感じです。 付属PDFリーダーとSICP日本語版  付属PDFリーダーは、これだけでWindows8入れる意味があるほど快適です。さらばAdobeReader。  Windowsタブのちょっと縦長の画面は、大部分の自炊技術書で余白を取るとぴったりトリミングが合います。SICPなど、このためにモニタの縦横比を決めたのかと思うほどです。  ちなみにSICPとは、「計算機プログラムの構造と解釈」という、その筋ではバイブル的な本です。 VisualStudio11とF#3.0  VSはレイアウト変更が自在なので、縦に使ってもまったく違和感がありません。 ソフトウェアキーボード  これで電車で立ったまま入力...
  • シーケンス式はどう動いているのか
    シーケンス式はどう動いているのか  実を言うと、僕がF#に入れ込んでいる理由の半分ぐらいはこの「シーケンス式」に惚れたことではないかと思うほど、個人的にSequence式を気に入っている僕なのですが、周りの人(ほとんどJava使い)に熱く語れば語るほど「ぽか~ん」とされるのもまたこのシーケンス式なのです。関数型言語を知らない人にとって、見よう見まねで使うことはできても、これほど不思議な動きをするプログラムはあまりないのではないかと思うのです。  とはいえ、周りの人を「ポカン」化してしまう理由の多くは僕の説明にあり、説明が伝わらない理由は僕自身がその中で何が起こっているのかをちゃんと分かっていないせいである、ということもはっきりしているので、シーケンスの裏の動きを追いかけてみることにしました。  しかし、F#のシーケンス式について深く書かれた日本語の文献も少なく、「Programmin...
  • 月謝3500円のそろばんの問題
    月謝3500円のそろばん塾で出たチャレンジ問題  「子供が通っているそろばん塾で、みんなで競う系の問題が出されたのを見ていると、ちょっとムズムズしてしまいVS2008を起動してしまった、の巻き」です・・・大人気ない。 お題 商品 金額 プロ野球 19373円 ディズニーランド 20453円 回転ずし 15906円 ピアニカ 3351円 子供部屋リフォーム 238440円 . . . というような商品リストがあり、この中で好きな組み合わせで買い物をして、合計が50万円に一番近い人の勝ち、というものです。 データの用意  とりあえず、こんなリストを作ってデータを与えます。 let goods = [ ("プロ野球", 19373) ("ディズニーランド", 20453) ...
  • calculatorActions展開編
    もう一山登るぞcalculatorActions展開編  Add関数の正体が分かったところで、残ったcalculatorActionsの征服にかかりましょう。「Programming F#」ではもう少し式が加えられていますが、何行並んでいても本質的には同じなので、returnを入れて3行の式とします。これをVisualStudioに載せてコンパイルが通り、 let res, stat = Run calculatorActions (0, []) の実行結果を確認するところから始めましょう。 let calculatorActions = state { do! Add 2 do! Multiply 3 return "完了!" } 1.Add、Multiplyの展開  まず小手調べに、AddとMultiplyを「...
  • StatefulFuncはなぜ動くか
    StatefulFuncはなぜ動くのか?  このページを見ているあなた、きっとオライリーの「Programming F#」を読み進めて、StatefulFunc(stateワークフロー)の理解に躓き、「何でこんなに分からないんだろう」「他の人は理解できているのだろうか」とStatefulFunc(もしくはstateワークフロー、状態ワークフロー、StateBuilder、計算式、コンピュテーション式、計算のビルドなど)というキーワードで検索して、何か情報はないかとここを見ているのではないでしょうか。  心配要りません。あなたは普通の人です。あの説明で理解できる人は、他の関数型言語(Haskellなど)をすでに十分理解している人だと思います。F#が初めての関数型言語、という人は、あの説明で分からなくてむしろ当たり前です。 「Programming F#」最大のヤマ場「Sta...
  • オブジェクト指向とワークフロー
    オブジェクト指向フレームワークとワークフロー(モナド)  今現在、Javaでフレームワークを設計する仕事をしている以上、今作っているようなものをどのような形にすればF#に持ち込むことができるのか、ということには当然興味の焦点のひとつになってしまいます。  以前、Javaでやっているライブラリを移植しようとあれこれ考えているうちに、結局F#でもオブジェクト指向に走ってしまい、結局プログラムの枠組みが変わらない、そのまま移植したようなプログラムになってしまったことがあります。オブジェクト指向で作っていると、ある程度は破壊的代入を前提としたクラスを作らざるを得ず、「これならC#でもいいじゃないか」と自分で思ってしまうようなプログラムでした。  こういう選択肢を取れることもF#(OCaml)の強みなのかも知れませんが、できることならF#なりのプログラムの形を追及してみたいところです。 ...
  • for展開編
    StatefulFuncはなぜ動くか for展開編(オマケ) 1.forを使ったループの導入  StateBuilderにはForメソッドがきちんと実装されており、計算式の中にforループを記述することができます。試してみましょう。 let calculatorActions = state { for i = 1 to 5 do do! Add i do! Multiply 3 } let res, stat = Run calculatorActions (0, []) これを実行すると、以下のような実行結果が得られます。 val calculatorActions StatefulFunc (int * string list),unit = StatefulFunc fun Delay@184-2 val s...
  • 二桁の数の秘密
    二桁の数の秘密 残念なできごと  つい先日、何かの調べ物をしていて、なかなか面白いサイトを見つけました。しばし仕事も忘れて読みふけっていたのですが、その中にとても興味深いネタがあったので、つい検証プログラムを書いてしまいました。  2桁の数の秘密  で、3月に入ってまた見てみると、驚いたことにそのサイトのサービス自体が2012年2月末で停止していました。僕は停止寸前のサイトをたまたま見ていたのです。  http //page.cafe.ocn.ne.jp/profile/suugakupazuru/diary/d2337  このサイト、とても面白いので、どこかでまた復活してもらえるとうれしいのですが・・・その想いもこめて、先日書いた検証プログラムをここに載せてみたいと思います。 お題  Googleのキャッシュはいつ消えてしまうかわからないので、失礼と...
  • イメージPDFファイルの処理
    スキャナが出力したPDFを、出力デバイスに合わせて変換しよう  この記事はF# Advent Calender 2012の11日目(10個目)の記事です。ひとつ前の記事はyukitos22さんのTypeProvider関連の丁寧な記事で、これを書き終わったら手を動かして試してみたいところです。  さて、主催者様の「実用的な」というお題を僕はそのまま字面通りとってしまい、「仕事以外に、F#で実用的なプログラムを書いたっけ・・・」などと回想した結果ひねり出したのがこのネタです。  いささか「実用」というよりは「オレ用」という感じもしなくはないのですが・・・  僕が富士通の名作ドキュメントスキャナS1500を購入したのは、ひとえにオライリーの「プログラミング F#」や技評の「実践F#関数型プログラミング入門」を持ち歩くのが辛かったからである、と言っていいほど僕の中でF#と...
  • C#フォームとの連携
    画面はC#業務はF#  F#一筋の人は、画面もF#で作ってしまうのでしょうが、F#には今のところフォームデザイナーが使えないため、画面フォームはC#で作り、ボタンを押した処理だけF#で作る、と言う選択をとることも少なくないのではないでしょうか。  ここでは、そのために必要な情報を整理しておきます。特にF#では非同期処理をすることが多く、その処理の中から画面に処理状況を表示していく方法を示していきたいと思います。 プロジェクト作成  どちらが先でもいいのですが、C#でWindowsフォームのプロジェクトを作成します。  そして、F#のライブラリプロジェクトを、同じソリューションに作成します。「F# Library」と「ソリューションに追加」を選択してプロジェクト名を入れればOKです。  こんな風に二つのプロジェクトが一つのソリューションになればOKで...
  • 図的な理解
    ワークフローの図的な理解  ワークフローというか、モナドの説明にはいろいろあって、いろいろあるからこそ、色んな人の沢山の捉え方を読むことができ、それを横断的に目を通すことでワークフロー(モナド)を立体的に捉えることができるのだと思います。インターネット上にも沢山の人が自分の言葉でモナドの説明を試みています。  そういうものをこれまで沢山見てきてお世話になったので、僕は僕なりの現在の理解を図にしてみました。 関数が二つ連続する場合  まず、単純に二つの関数を連結した式を考えます。 let test = let x = funcA funcB x  もしくはもっと単純に let test = funcA | funcB x  でもいいでしょう。  これと等価なワークフローを作ってみます。この際testworkflowが何なのかは気にする必要があ...
  • lazyさ加減に萌
    Seqのlazyさ加減に萌  恥ずかしながら今日の今日までずっと誤解していたことがありまして、それはどんなことかというと、 F#のシーケンス式はシーケンスを発生する段階では遅延評価しているが、それを処理するSeq.mapといったメソッドは、実行時にシーケンスから値を取り出しながら結果の入ったシーケンスを生成している。  という思い込みです。  もちろんこれは後で考えれば何の根拠もないばかりか、冷静に考えればそうする実装上のメリットは何もない、という 恥ずかしい誤解です。しかもリファレンスにしっかり「遅延評価している」と書いてあります。  というわけで、恥ずかしいついでにSeqモジュールに実装されている関数がどの程度lazyかを調べて見ることにしました。 Seq.mapのlazyっぷり  その関数が入力をどの程度遅延評価しているかは、副作用を持つ無限シーケンスを渡し...
  • 型から始めるプログラミング
    型から始めるプログラミング この記事は「F# Advent Calendar 2013」16日目の記事です。 型に導かれて  静的な強い型を持った関数型プログラミングにある程度馴染んでくると、次第に「コンパイルを通ったものは大抵動く」という不思議な感覚を持つようになります。この感じは手続き型プログラミングしかやったことがない人にはなかなか伝わらないもので、そんな話をしても大体「そんなわけあるわけないwww」というような反応を受け、こちらもうまく伝えられずモゾモゾすることになりがちです。  もちろん「コンパイル通ればできてる」というのが正しくない、というのは分かりきったことなのですが、「コンパイルを通った時点で動いたものに何の問題もなかった」という事象の確率がかなり高いのもまた統計的なデータこそないものの皆様肌で感じているのではないかと思います。  こういう「...
  • 年俸1000万の会社の試験問題
    年俸1000万の会社の試験問題  名古屋Scala練習場の問題がTwitterに取り上げられていたので、F#で挑戦してみました。  シーケンスの練習問題としてとてもいい問題なのではないかと思います。 お題 4種類のアルファベット "A,C,G,T" から成るn文字の文字列のうち、"AAG"という並びが含まれる文字列を全て列挙するプログラムを書きなさい。ただし、nは3以上の整数とし、文字列内に同じアルファベットが出現しても構わないものとし、出力順序は問わないものとします。 ... 適性検査に合格された方はその生産性を実現可能な方です。生産性に見合う初任給として年俸1000万円をご用意しております。 元ネタはこちら (しかしハニトラっぽいなぁこれ)っていうか、適性検査はPerlまたはJavaって書いてあるw F#だと...
  • ひまわりっぽいの
    黄金の花を愛でる - 素数夜曲より -  整数論の独学者用教科書「素数夜曲」がリニューアルされたので、コンテンツで遊んでみました。この本で取り上げられているプログラミング言語はSchemeなので、それをまぁF#に移植しただけとも言いますが....  詳しいことは本を買って読んでください。整数論の玉手箱をひっくり返したような本で、いわば「宝の山」です。 ソース // Himawari K. Katayama with Sosuu Yakyoku open System open System.Drawing open System.Windows.Forms let a = 1 let b = 13 let rational x y = Seq.unfold (fun n - if n = 0 then None ...
  • プラグイン/ニュース
    ニュース @wikiのwikiモードでは #news(興味のある単語) と入力することで、あるキーワードに関連するニュース一覧を表示することができます 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_174_ja.html たとえば、#news(wiki)と入力すると以下のように表示されます。 SlackからWikiへ!シームレスな文章作成・共有が可能な「GROWIBot」リリース - アットプレス(プレスリリース) 【グランサガ】リセマラ当たりランキング - グランサガ攻略wiki - Gamerch(ゲーマチ) ポケモンBDSP(ダイパリメイク)攻略wiki - AppMedia(アップメディア) 【ひなこい】最強ひな写ランキング - ひなこい攻略Wiki - Gamerch(ゲーマチ) モンハンライズ攻...
  • @wiki全体から「TDDの実践」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索