2007-01-01から1年間の記事一覧

剰余を使わない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環境で動くプログラミング言語で、アート屋さんが手軽にグラフィックやアニメーションできるよう開発されたもの…

Winamp plugin開発おぼえがき

必要なもの:Winamp SDK。 公式なドキュメントがぜんぜんないみたいなのでサンプルとか参考にしつつ。Forumに結構な蓄積がされてるのではまったら検索するとなんかしら出てくる。 generalプラグインの雛形はこちら:Empty general purpose plug-in project. …

Winamp用Twitterプラグインを作ったよ

追記(2010-08-26) ソース等完全に消滅したので再配布の可能性は非常に低いです! 私がやる気出すより他のを使うか開発おぼえがき情報を元に自作するほうが早いとおもいます。他のWinamp用twitterプラグイン: http://www.magicvox.net/archive/category/diary/…

機械にできることは機械にさせておけばいい。しかし人間のほうが上手くできるとすれば

――無論人間がそれをしたほうがいいだろう。しかし、その仕事がとても面倒だとしたら?そういったことは自分以外の誰かさんにやっていただきたいものだ…… しかしコンピュータは命じられたことしかやらないとはよく言われるが、人間は命じられたことすらまとも…

今後行くかもしれないイベントたち

Gauche Night(5/9) http://practical-scheme.net/wiliki/wiliki.cgi?GaucheNight 割とメジャーなScheme処理系Gauche界隈のトークショー。 出演者豪華。 まだチケット売ってるみたいですよ! ruby kaigi2007(6/9-6/10) 国内最大級のrubyイベント。 有名人がた…

webで事情に詳しくなれるのはweb業界のほんの一部だけ(それでも凄いことなんだけどさ)

このへんはMicrosoftのMSDNやらOracleやらAppleのWWDCのセミナーの話はNDAも関係してblogで書かれない法則が発動しているよなぁと思う。(オレが知っている範囲でこの現象に似ているのはというと。DTP関係のセミナーの内容も、受講が有料だったりするためかb…

インピーダンスがミスマッチしているのですよ

手続き型言語とSQLのインピーダンス問題。ビジネスロジックをSQLで書くのは是か非かみたいなのとか。あるいはGPGPU。やりたい処理に対して、それをどこでやるかによって記述がバラバラ。きもい!一つの言語内で全部済ませたいが、まだなしとげられていない。…

RubyでSchemeを作ってみたよ今度こそ。

ちゃんとREPLでインタープリット!末尾再帰最適化!継続なし!(でも原理的にはすぐ実装できるはず……!)中間言語方式! class Cons def initialize(a,d) @car=a @cdr=d end attr_accessor :car attr_accessor :cdr def cadr cdr.car end def caddr cdr.cadr …

安定性か可能性か、みたいなよくある話

三月は就職活動をしていまして。 福井の某社に内定、水道橋の某社にたぶん内定。どっちに行くべきなのか、と延々と悩んでいる。 老舗とベンチャー、スーツもいる会社とギークでいっぱいの会社、安定してる会社と成長してる会社。どっちがいいのかは自分の適…

集中力なさすぎ

机の上に読みかけの“Generic Programming”を肘で押さえつつsubversionについて勉強しながらリポジトリを整理しつつニュー速+をチェックしつつLDRを開き、そうしている間にもWinampが音楽を垂れ流し続けているわけですよ!

C#でSchemeを作ってみた

S式をコンパイルしてVMで実行するタイプ。末尾再帰最適化あり。call/ccあり。syntax-rulesあり(一部。もちろんhygienic )。これも去年ごろ製作したものを諸般の事情により公開。 評価機はhttp://www.cs.indiana.edu/~dyb/papers/3imp.pdfを参考にした。 で…

WindowsでTierra

はじめに Tierraとは、トム・レイが開発した人工生命環境で、自己複製・突然変異・自然淘汰による進化をコンピュータ上で再現したものです。Windowsで動くGUIなTierraを数年前に作っていたのですが、せっかくなので公開します。

メモ

http://reader.livedoor.com/js/compat.0.3.2.js http://reader.livedoor.com/js/common.0.3.2.js http://reader.livedoor.com/js/event.0.3.2.js http://reader.livedoor.com/js/roma.0.3.2.js http://reader.livedoor.com/js/template.0.3.2.js http://rea…

Char classがないのはかなりもにょもにょする

self[nth]でいきなり整数値返すのはかなり暴力的でアレだな。はともかく、rubyにはislowerみたいな文字種類判別関数はないのだろうか。それがくっついててしかるべきCharクラスもろとも行方不明なので困る。正規表現があるからいいだろヴォケとかそういうこ…

突然ですがRubyでSchemeのサブセットを実装します。継続と末尾再帰最適化ありの。その1:データ構造とパーサ

Scheme/Lispを実装してみようって企画はたまにあるのですが*1、どれもこれも無限ループするとスタックオーバーフローする始末。末尾再帰最適化もないような代物にSchemeを名乗る資格はございませんことよ。 というわけで、この私がRubyでScheme(末尾再帰最…

インピーダンスミスマッチ

相変わらずActiveRecord.netを設計している。 まずRDBとオブジェクトというデータ構造のミスマッチがあり、それに付随してデータ型もミスマッチ。DBエンジンはそれぞれ違う特性と独自拡張を持っていて ――まあ複数のDBに対応すべきかどうか考えあぐねているの…

C#でWSSE認証する

参照:はてなフォトライフAtomAPIとは - はてなキーワードサービスによってnonce/digestをbase64エンコードしたりしなかったりするらしい。はてなのはする。 準備する情報 string username="hogehoge"; string password="pass"; DateTime created=DateTime.No…

XPathわからん

XmlNode#SelectNodesではまっている。"title"で引っかからないのに"*[name()='title']"でマッチするなんてことがあるのか?(というか、あるんだが) 理解不能。→あー、namespaceまわり?→そうみたい。 <hoge xmlns="http://d.hatena.ne.jp/gnarl/"> <hage><fuga /></hgae> <hage /> </hoge> XmlDocument d=new XmlDocument(); d.LoadXml( xm…