技術memo

関数型ゴースト

継続渡しスタイルの再帰関数の読み解き方、あるいは多値で済む場合

Scheme手習い(The Little Schemer) 8章に、multirember&coという関数が出てくるのですが、何だか急に難しさが跳ね上がったようで、正直わけがわからなかったので、自分用に解説をメモしておきます。 動作環境はGauche 0.9.4です。

「同じようなswitch文があちこちにあると改修が困難」って本当?(Expression Problem)

概要 プログラムの設計では、よく「同じようなswitch文があちこちにあると改修が困難になる」と言われています。そういった場合は、「switchの分岐を、オブジェクトの多態性を利用して無くすべきだ」とも言われます。 しかし、それは本当でしょうか。「すべ…

WindowsでEmacsにテキストファイルを関連付けする

Windows 7でemacsclientを導入しようとして困った話です。 やりたいこと Windowsのエクスプローラーでテキストファイルをダブルクリックすると、起動済みのEmacsでそのファイルを開いてほしい。

SML# の「多相レコードによる多相ヴァリアントの表現」がわからなかった話

SML

この投稿は、ML Advent Calendar 2014の22日目の記事です。前日はkawada_syogo225さんのAlice MLの仮想マシンについて | 小さいモノは美しいでした。 多相ヴァリアントの話 ラベル付きヴァリアントの多相版、です。詳しくは以下あたりを見ましょう。 4.2 多…

SchemeでF# 風パイプライン演算子を書いてみた

パイプライン処理のこと 巷ではStreemやStreeem、さらにはstleemなんてものまで現れて、パイプライン風プログラミング言語が話題になっています。 パイプライン処理風のプログラミングスタイル、面白そうですね。 ところで、パイプラインといえばF# ですね?…

FSharperならこう書く(A Poker Game Program) #FsAdvent

これはF# Advent Calendar 2014の8日目の記事です。 前日はk_disposeさんのF#のlintツールであるFSharpLintを使ってみる - Qiitaでした。 今日は、 「F#をやってる人って普段どんなコードを書いているの?」 「何を考えてプログラミングしてるの?」 とお思…

Macでプログラミング環境を作った話

Mac初心者です。 今までプログラミングは仕事でも趣味でもWindows機を使っていたのですが、せっかくMBAを買ってしまったので、そろそろ開発環境を本気出して作ってみようかと思い立ち、あれこれインストールしてみました。 その辺りのメモ書きです。

IComparer<T>と、リフレクションを使用しないSortableなBindingListの実装

リストのソートなんて今時LINQでOrderBy/ThenByが使えるから十分、とはいえそうも行かないのがUI周りですね。 「Windows Formsでdata objectを定義してそのListをDataGridViewにDataBindしたら、ヘッダをクリックしてもソートしてくれないんですけど!」 そ…

基礎プログラミング演習(1),(2)をF# でやってみた

元々お手本コードを割と関数型風に書いていたので、ほとんどそのまま一対一対応で移植する形になりました。 比較すると、記法がどれほど簡潔かわかるんじゃないでしょうか。

基礎プログラミング演習(2)

前回の演習(基礎プログラミング演習(1) - 技術memo)と同メンバーで、また似たようなプログラミング演習問題をやってみる会を開きました。 問題 コマンドラインで動くじゃんけんゲームを作りましょう 仕様 初めに「出す手を入力してください(g:グー、c:チョキ…

業務プログラマーのための不完全にしてあまり意義のないプログラミングガイド

概ね、「比較的冗長な構文を持ち、ガベージコレクションを行い、シングルディスパッチを使う、クラスベースで静的型付けのオブジェクト指向言語で、実装を単一継承しインタフェースを多重継承する」ようなプログラミング言語の話です。 なお、以下のコード例…

ログ出力ライブラリlog4netを独自クラスでラップする(その他使い方メモ)

目的 log4netのインターフェースが何だか使いにくい、独自の関数でログに書き込みたい でも自作クラスでラップすると%location等のlog4netで出力する「書き込み場所」情報が全部独自クラスになってしまう エラー処理等、同じようなことを何度も作りたくない …

LINQでバッファリングしてみる

結局何がやりたいのかはよくわからなかったのですが、LINQ楽しいよLINQ、というお話です。たぶん。 前置き プログラムから動的に生成したSQLをDBに問い合わせすることって、よくあると思うんです。 例えばこういうSQLについて。 select * from product where…

コナミコマンドができるまでひたすらランダムなキー入力を生成する

Twitter Webでコナミコマンドが使えると話題になっていたので、演習問題がてらやってみます。 仕様 擬似乱数のシード値は外部から指定する 生成する記号の個数の上限を、外部から指定する キー入力される可能性のある記号の一覧(↑↓←→AB)は、固定とする 特定…

再帰関数のメモ化(Memoization for Recursive Functions)とY Combinatorの速度計測

解説は前記事再帰関数のメモ化(Memoization for Recursive Functions)とY Combinator - 技術memo 以下、F# Interactiveに流し込むだけ。

再帰関数のメモ化(Memoization for Recursive Functions)とY Combinator

Y Combinatorのことを調べていて、気がついたらこんなことに。 目次 関数のメモ化(Memoization)のこと Y Combinatorのこと(不動点コンビネータ) 再帰関数のメモ化(Memoization for Recursive Functions) 参考記事

SQLのouter joinの罠にハマった話

SQL

結論 join on ほにゃららと、where ほにゃららだと、outer joinのときに挙動が違います。 outer joinのouter側のテーブルへの条件は、onのところに書きましょう。 left outer joinでwhereのところにright側テーブルに関する条件を書いた場合、条件に合致しな…

基礎プログラミング演習(1)

ご無沙汰してます。 ややあって、友人のプログラミング初心者2人とプログラミング勉強お泊まり会をしましたので、そのレポート的なものを残しておきます。 条件など 2人はプログラミング初心者 入門書の前半くらいまで読みかけ 使用言語は、一人がC++、もう…

F# でリフレクション/式木に触れてみる

前置き F# Advent Calendar 2013 8日目の記事になります。 昨日の記事は@brother_nomuさんの「F# で Oracle にアクセスしてみたよ!」でした。 ということで、F# を9月に始めて3ヶ月、ちょっとは関数型プログラミングにも慣れてきましたC#er な私です。 F# …