2007-05-01から1ヶ月間の記事一覧

そろそろgauche nightについて書いておくか

トラバ先:http://karetta.jp/article/blog/gauche-night/022932 なんという遅さ…… レイジーにも程が。だいたいあの界隈について予習を全くせず行ったせいで話の文脈が全然見えず困った。印象に残ったこと:黒田さんが超かっこいい。 レポートは他の人がいっ…

剰余を使わないFizzBuzzを純粋関数型言語C++で書いてみた

c++

こないだのエントリにも書いたけど。つづき。 ルール・剰余使わない・実行時に行なうのはI/Oのみ(数列の生成も条件分岐もコンパイルタイムに処理する) #include <iostream> using std::cout; using std::endl; template<int c,int fiz,int buz> struct FizzBuzz { static void exec() { cout <</int></iostream>…

いま流行のFizzBuzzを純粋関数型言語C++で書いてみた

c++

73行。boost/mplやboost/lambda駆使すれば20行くらいになるかな? なんかあんまり純粋関数な感じしないんだよね微妙。 template<bool cond,typename th,typename el> struct if_; template<typename th,typename el> struct if_<true,th,el> { typedef th result; }; template<typename th,typename el> struct if_<false,th,el> { typedef el result; }; template</false,th,el></typename></true,th,el></typename></bool>

C++でモナド

c++

檜山先生のモナドの説明を純粋関数型言語C++で書いてみました。 #include "stdafx.h" template<int n> struct int_{static const int value=n;}; //例の最初に出てくる副作用ありバージョンはそもそも記述できないのでいきなり副作用なしバージョン。 template<typename T,typename C> stru</typename></int>…

C#で書くHTTPサーバ、について

まずHTTPサーバたる要件とは: サーバが「HTTP/1.1 サーバ」を名乗っても良いのは、以下を満たす場合に限られます。 Host ヘッダがないリクエストに、正しく 400 レスポンスを返す事ができる リクエスト URI として絶対 URI を受け入れる チャンク形式転送コ…

.netで動く軽量なwebサーバが欲しいんだが

ローカルで動かす向けの超軽量なやつが。案外見つからないんだよね自分で書くしかないのか。 目的はローカルで動かしてブラウザから操作するアプリを作ることで、InstantRailsも試してみたんだけど、起動が遅い上に「速いwebアプリ」程度の速度しか出ない。Ap…

Erlangの語源はトラヒック理論の「呼量」から (じゃなかった)

オフィシャル探しても語源についての記述が見当たらなかったんだけど、電話屋が開発したならまず間違いないと思う。 アーラン(英:Erlang)は音声電話の分野で用いられる、通信トラヒック量に関する統計的な尺度であり、無次元数である。デンマークの電話技…

compile-time schemeの実装

こないだ作ったやつについて、もう少々。 schemeの基本となるデータ型はconsだけど、これは template<typename CA,typename CD> struct Cons { typedef CA car; typedef CA cdr; }; という型で表現される。CA,CDには任意の型を指定できるわけだが、int型の値はそのままでは入らないの</typename>…

compile-time schemeで副作用のある操作を行う

set!なんて静的にどうにかなりそうなのじゃなくて、I/Oとか乱数とかdynamicに評価しないと絶対どうにもならないやつをどうするか―― つまりモナド的なアレの導入を! まず、静的に評価可能な操作とそうでない操作は静的に識別可能(ややこしい)。すなわち: 定…

compile-time schemeで変数の再定義を実装したい

c++

つまりはset!。 変数テーブルはネストした型として表現されているので、一度束縛された値を変更することはできない。さてどうするか。 単純な例なら、意外とあっさり解決する。evalはのペアからを返す関数となっているが、これをのペアを返すようにする。 <a, ((a 10) (b 20))> =</a,>…

C++でテンプレートプログラミング

c++

C++ for Haskellerにまとまってるけど、自分でも書いてみる。データ構造をネストした型で定義して、テンプレートの部分特殊化によるマッチングで条件分岐しつつ処理。これが基本戦略。 データ型 データ型は二種類あります。これらは文法で厳密に区別され、メ…

C++でSchemeつづき

(define m 1000) (define p (lambda (x y z) x)) (define q (lambda (x y z) y)) (define r (lambda (x y z) m)) (define t (lambda (x th el) (if (= x 0) (th) (el))) (p 1 2 3) => 1 (q 1 2 3) => 2 (r 1 2 3) => 1000 (t 0 (lambda () 1111) (lambda () …

C++でcompile time Schemeをつくってみる計画

こんなことばかりしてるとSchemeが病的に好きな人みたいに思われそうですが、特にそういうこともありません(それどころかSchemeでまともなプログラムを組んだこともない始末)。 それはともかく、Generic ProgrammingとかModern C++ Designとか読んでたら非常…

openFrameworksをちょっとさわってみた

Processing(またはproce55ing)の設計に影響を受けたC++フレームワーク、openFrameworksとやらをいじってみました。 processingっていうのはjava環境で動くプログラミング言語で、アート屋さんが手軽にグラフィックやアニメーションできるよう開発されたもの…