ようこそ。睡眠不足なプログラマのチラ裏です。

プログラミング

メモ化を抽象的に考えて一般化する。これぞジェネリックプログラミングの神髄!なんつってー

前回のエントリーで書いた関数の「メモ化」について抽象的に考えて、 ジェネリックプログラミングをしてメモ化を一般化してみましょう。 ググッたところ、1つの引数をとる関数のメモ化関数は多くの人が書いていますが、 2つ以上の引数をとる関数のメモ化関…

この関数呼んだら毎回超モッサリするんだけど?だったらメモ化とかしてみたら?というただのメモ

メモ化とはプログラムを高速化するための最適化技法のひとつで、 関数呼び出しの結果を保持しておいて再利用するというものです。 1度呼び出された関数が再度呼び出されたときに再計算をせずに、保持しておいた値を再利用する手法です。 具体的には、キーと…

F#でもオブジェクト指向したい。手始めにC#で書いたUndo,Redoの実装を移植してみました。あれ?F#にはprotectedアクセシビリティないの?ぐはぁ

F#は.NETの第一級言語だからオブジェクト指向だって余裕でできるよ関数型の考え方に基づいて、汎用的に使えるUndo,Redo機能の実装しようと考えたとき、 関数型言語のノウハウがない自分には、シックリくる良い案が全く思い浮かびませんでした。 F#は関数型パ…

ISAさんがかんがえたSortedList{T}を、ちょっと自分風に弄ってみたよSortedList{T}

ネタ元: ぼくのかんがえたSortedList - こげこげ堂はてな支舗 http://d.hatena.ne.jp/isaisstillalive/20091022/1256188497 ISAさんがかんがえたSortedList{T}を、もうちょっと考えてみた自分だったらこうするかなぁ的に、id:isaisstillaliveさんのコードに…

なんぞこれ。NaNってなんなんすか?あのね、非数のことだよ。なんだかナンのカレーが食べたくなるね。ヒ素じゃなくてよかった。

ネタ元 びっくりした事 - えムナウBlog (わんくま同盟Blog's) http://blogs.wankuma.com/mnow/archive/2009/10/14/182100.aspx 以下のコンソールアプリケーションで"NG"と表示するケースがあった。 class Program { static void Main(string[] args) { doubl…

F#で継続渡し形式(CPS)変換を抽象的に考えてみたら、それってつまりHaskellの継続モナドみたいなものでした。ということで継続ワークフロー(簡易版)作った。

[前置き] 継続とはプログラミングにおいて「継続」とは、ある計算のある時点における「残りの計算」を表す概念のこと。 つまり、ある計算過程の瞬間におけるその過程の未来全体を表すものを意味する。 プログラミング言語で継続を扱う機能を導入すると、ユー…

ループを使わずに1から10までの総和を表示するプログラム

何故か流行ってる「ループを使わずに1から10までの総和を表示するプログラム」というお題 F#余裕のワンライナー #light {1..10} |> Seq.fold (+) 0 |> print_any 書いた。オチはない。 追記: とゆうか、F#にもsumありましたね。気付かなかったw #light {1.…

Undo,Redoの実装って何回かしかやってない気がする。ジェネリックなCommandパターンとMementoパターンの応用で大体いけそうな気がする。

不足気味でしたので、たまにはC#分を補充しておきます。 ↓ ↑ もう1年近く前になるんですね。以前、下記のエントリが注目を浴びていて、 わたしも楽しく読ませてもらいました。 Undo,Redoの実装って何十回もやってる気がする - あしあと日記 http://d.hatena…

F#で言語指向プログラミング(LOP)のアプローチ。Seqを扱うための簡単なワークフローを作って、ワークフローを味見してみよう。

F#では「ワークフロー」という機能を備えることで、言語指向プログラミング*1のアプローチがし易くなっている。 これは開発者にメタプログラミング、DSLといった柔軟性を備えたライブラリを作成する機会を、 より多く与えてくれるのではないだろうか。この機…

F#でStateモナドしてみよう。そうですよね、副作用は怖いですものね。

id:NobuhisaさんのWorkflowでモナド - (hatena (diary ’Nobuhisa))に触発されてF#でStateモナドしてみました。 ですが、Haskellのド素人でF#初心者なのでいろいろと間違っているかもしれません。 とりあえず的に、取り急ぎコードをうpしておきます。(F#CTP)…

F#でテトリスを実装してみました(10年ぶり2回目)。

F#2.0で動作するコードはこちら↓ F#でテトリス。VS2010 RCまたはVS2010評価版で動くソースです。 ※以下の記事の内容は古くなっています。 モンハン3の狩猟生活に忙しい今日この頃ですが、 合間を縫って、F#でテトリスを実装してみました。 F#の勉強をするに…

ゆの in F#

懐かしの「ゆの in language」を引っ張り出してきてF#で書いてみた。 ちょうど1年前くらいに流行っていたネタですね。月日が経つのは早いなあ。 #light open System let X =() let __ = () let (/) _ _ = () let (<) _ s = printf "ひだまりスケッチ365%s" …

ちょっと草植えときますね型言語で近況報告しますwWWwwww

「ちょっと草植えときますね型言語」 ラムダ計算ベースの言語で、「関数定義」と「関数適用」のみで記述するという変態的仕様のアレ。 以前からその存在は知っていたけど、当時の自分には難しすぎて理解することができず悔しい思いをした(甘酸っぱい思い出)…

シリアル化可能なStateパターン的に使えるタイプセーフEnum。たぶん最終形態(フリーザ様的な意味で)

id:atsukanrockさん、トラックバックありがとうございます。 「 熱燗ロックのブログ - .NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その2」を受けまして、 さっそく、まねまねさせて頂まして、再びTypeSafeEnumを書き直しました。 そう…

F#でもジェネリックオペレータみたいな。2つの引数を取る関数を中置演算子にしちゃうよ。

以前、C#で「演算子オーバーロードを活用してジェネリックオペレータを作る。それは即席自作演算子的な何か。」を書きました。 F#の方がより利用価値が高いっぽいかなーと思って、F#でも書いてみました。 #light open System (* T Combinator Thrush 鵺鳥 λa…

C#で振舞いを抽象化してStateパターン的に使えるTypeSafeEnumを書いてみた。Delegate.DynamicInvokeのオーバーヘッドっていかほどなの?

以前書いたAbstractなTypeSafeEnumでは、振舞いについてFuncデリゲート固定として実装していました。 でもやっぱり、ちゃんとしたStateパターン的なTypeSafeEnumが欲しいよね。 というわけで、タイプセーフEnumの振舞いについてジェネリックで抽象化してみま…

F#のアクティブパターンがふつくしすぎる。あらまほしき言語なり。

最近、C#ほったらかしてF#でいろいろやってます。F#にお熱です。 OCamlらくだ本を読み返しつつ、いげ太さんのブログやdeko_ponさんのF#入門などで勉強しています。 というわけで、また息抜きに当ブログ恒例の「世界のナベアツ問題」(風化問題ってレベルじゃ…

俄仕込みのF#でケブンッリジ関数。パイプ演算子って直感的で素敵だよね。

前回のC#版に続きまして、息抜きを兼ねて俄仕込みのF#でケブンッリジ関数を書きました。 #light open System open System.Text.RegularExpressions let str = @"こんにちは みなさん おげんき ですか? わたしは げんき です。 この ぶんしょう は いぎりす …

ケブンッリジ関数でどう書く?orgデビューしてみた

微妙に風化したお題ではありますが、どう書く?orgデビューしてみました。 using System; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main() { var str = @"こんにちは みなさん おげんき ですか? わたしは げんき …

OrderedDictionaryクラスのジェネリック対応してみた。System.Collections.Specialized 名前空間以下のコレクションはジェネリック対応されていないんだよね。

System.Collections.Specialized 名前空間以下のコレクションについて以前、「.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。」を書きました。 このエントリでは、素敵な方たちにはてなスターを頂き、共感していただけ…

「スマートタグの表示」のショートカットキーの既定値がShift+Alt+F10というのは使いづらい件。Shift+Alt+Zでよくね?

Visual Studio2005以降では、Eclipseなんかに比べるとまだまだ貧弱とはいえ、 便利なリファクタリング機能がいくつかある。たとえば、フィールドやメソッド名を変更するとき、 スマートタグを表示することで、参照されているものすべての名称を一括して変更…

スコープ間またはスレッド間をまたいで、オブジェクトの有効期間を管理する

MSDN マガジン - CLR 徹底解剖 オブジェクトの有効期間を管理する 残念ながら、C# には、スコープ間またはスレッド間で使用できる using キーワードと同等の簡単なコンストラクタはありません。このため、Dispose の呼び出しをコンポーネント間でネゴシエー…

イベントリスナが先にお亡くなりになっています。あれ?残念ながらメモリリークです。あのね、WeakEventパターンを使うといいと思うんだ。WeakEventManagerから派生して、抽象的なWeakEventTriggeredManagerクラスを作ってみよう。

WeakEvent パターン(msdn.microsoft.com)というのがあります。 WPFでごにょごにょしているような方であれば、ご存知の人も多いようですが、 WPFと無縁の人たちにとっては、認知度がかなり低いようです。 WeakEventパターン*1が有用となるシナリオは、なにもW…

蛇使い入門とか

初めてのPython 第3版 リファクタリング・ウェットウェア 達人プログラマーの思考法と学習法 GW用に上の2点を買ってきました。 よし、これで実家で暇しなくてすむ! 去年はHaskellを齧りました。 C#と仲良くしてIronPythonして遊びたい。ちょっとした鉄蛇使…

C#からOpenCVで顔を検出して"ゆっくり"してみよう

なにやら↓こういうのが流行っていたようですね。元ネタ Perlでアニメ顔を検出&解析するImager::AnimeFace Yukkurizer - アニメキャラゆっくり化CGI 何かを受信(^o^)ノ *1 ゆっくりしてみようというわけで、やつけで適当にC#でゆっくりしてみました。 C#やVB…

演算子オーバーロードを活用してジェネリックオペレータを作る。それは即席自作演算子的な何か。

C#に限った話ではなく、その他のプログラミング言語(C++やD言語など)でも、 演算子オーバーロードを利用するようなケースは非常に限られていると思う。 というのも、適切に利用せずに無闇に使うとメリットよりもデメリットの方が大きくなる場合が多いからだ…

はてなハイクAPIを使ってみよう(LINQ to XML)

C#から「はてなハイクAPI (http://h.hatena.ne.jp/api)」を利用するサンプルを作りました。 他の言語のサンプルは割りとあるようですが、C#ではなかったようなので。 画像を添付した投稿については面倒くさいので直接はサポートしていませんが、 呼び出し側…

迷路の生成とその解

パラドックス大全 - 世にも不思議な逆説パズル 著:ウィリアム・パウンドストーン 訳:松浦俊介 という本を読了しました。冒頭の水槽の脳の話から最後まで楽しく読めました。 その中で、NP完全と迷宮の話がでてきまして、大変興味をそそられました。 プログ…

CSPで暗号化する場合、非対称秘密キーをローカルなんかに平文で保存しないでください。

[方法:キー コンテナに非対称キーを格納する] http://msdn.microsoft.com/ja-jp/library/tswxhw92.aspx 非対称秘密キーは、ローカル コンピュータにそのまま平文として保存しないでください。 秘密キーを格納する必要がある場合は、キー コンテナを使用する…

レーベンシュタイン距離とN-gramモデルのアルゴリズム。それは擬似Google Suggestっぽい何か。

きっかけはレーベンシュタイン距離 - shin5papaの日記 http://d.hatena.ne.jp/shin5papa/20090311/1236745197 レーベンシュタイン距離とN-gramモデルで、擬似的なGoogle Suggestレーベンシュタイン距離を使うことによって、擬似的にGoogle先生の「もしかして…