Spirit.Phoenix に apply がなかったので作ろうと思ったら bind ができたでござる

C++

名前は apply だけど bind だよ。ちなみに boost::phoenix::bind よりすごい点は、 bind の第一引数を placeholder にできるところ。 あとC++03とC++0xの両方の場合で作ったけど、C++0xおいしいです (^q^)#include <boost/config.hpp>#if defined(BOOST_HAS_TR1_UTILITY) && !d</boost/config.hpp>…

時代はBoost.Lambdaではなく、Spirit.Phoenixなのだ

C++

#include <boost/spirit/home/phoenix/core.hpp> #include <boost/spirit/home/phoenix/operator.hpp> #include <boost/spirit/home/phoenix/scope.hpp> #include <boost/spirit/home/phoenix/bind.hpp> #include <boost/spirit/home/phoenix/function.hpp> #include <boost/spirit/home/phoenix/statement.hpp> #include <…</boost/spirit/home/phoenix/statement.hpp></boost/spirit/home/phoenix/function.hpp></boost/spirit/home/phoenix/bind.hpp></boost/spirit/home/phoenix/scope.hpp></boost/spirit/home/phoenix/operator.hpp></boost/spirit/home/phoenix/core.hpp>

packageのインストールに関する備忘録

cabal install のリポジトリ http://hackage.haskell.org/trac/hackage/wiki/CabalInstall を見ればいいんだけど、おもいっきり間違えた。 cabal install の stable branche は http://darcs.haskell.org/cabal-branches/cabal-install-x.x である。 Setup c…

tieで初期化させろ take 2

このような指令が来ましたので、やりましょう。 #include <utility> #include <tuple> #include <iostream>#include <boost/preprocessor/tuple/elem.hpp> #include <boost/preprocessor/tuple/eat.hpp> #include <boost/preprocessor/tuple/rem.hpp> #include <boost/preprocessor/seq/seq.hpp> #include <boost/preprocessor/seq/size.hpp> #inc…</boost/preprocessor/seq/size.hpp></boost/preprocessor/seq/seq.hpp></boost/preprocessor/tuple/rem.hpp></boost/preprocessor/tuple/eat.hpp></boost/preprocessor/tuple/elem.hpp></iostream></tuple></utility>

バッファ移動とウィンドウ移動

使いこなせていないEmacsに手を入れてみた。と言っても設定レベルだけど、更新しなさすぎなので、書く。 ; となりにあることが分かっているのにC-bとか面倒すぎるので、C-tabでウィンドウのバッファを適当な順番で送る (global-set-key [C-tab] 'bury-buffer…

darcs備忘録

本日のわんくま名古屋ではgitのセッションを聞きつつ、darcsを使い始めていたので、備忘録として使ってみたコマンドを適当に書いておく。分かったことがあるたびに追記する。 darcs init : カレントディレクトリをルートとしたリポジトリを作成する。 darcs…

最近プリプロセッサの話しかしてないような気がするから、今日はちょっとプリプロセッサの話でもする

巷では、やれ「プリプロセッサは名前空間を台無しにする」だの「foo(n++)とかしたらn++が二回評価されて結果が云々」だの、「定義のときにカッコがどうたら」とかボロクソ言われてますが、まぁ正しいです。ですがプリプロセッサを見るにつけて、帰りに一杯や…

プリプロセッサ基礎文法最速マスター

最速だけに催促されたので書きますね! 1.基礎 印字命令を見てみましょう。 lesson1-1.cpp 123 abc AAAAAAAAAAAAAAAAA!と書いたファイルを実行すると、 123 abc AAAAAAAAAAAAAAAAA!このようになります。見てのとおり書いたまんま印字されるので、特に印字す…

並列プログラミングカンファレンス感想など

TOKIO CITYに行くたびに書いてる気がするけど、まずこれを言いたい。鉄道網のcomplexity爆発しろ!既にしてるわ! 並列プログラミングカンファレンス、略して並カン(「なみかん」と読みます。だからatndの募集ページがみかんなのです)に行ってきました。 …

昨日Android端末を買ってきてちょっと自慢的なことをしたかったわけですが

世の中は非情ですね。

型推論の調べ物

http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4-06w/text/miniml011.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070717/277580/ http://ocaml.jp/?plugin=attach&refer=Users+Meeting&openfile=OCaml-meeting0908-revised.pdf http://w…

チェックしてるのはそこじゃない

C++

http://d.hatena.ne.jp/akiradeveloper/20091231/1262264357 すると、first_argument_typeとかがないよって怒られる。いやいや、怒り方違うだろと。binaryじゃないとダメだよって怒るのがふつう。 本当はそういう風にコンパイルエラー出してほしいのですが、…

2010年あけましておめでとうございます。

今年もよろしくおねがいいたします。 一年の型は元旦にありというのはつまり、元旦というコンパイル時に型を決めるということで、一年は静的型付けであると言いたいんだと思うわけです。そこで今年の型を決めましょう。 今年の型はboost::anyです。

総括

まずめっちゃさぶい。地球温暖化とか言ってる輩の気が知れない。めっちゃさぶいやん。あと今年の最初のほうとか全く記憶にない…なんか過去の日記読んでたらAC4とかやってたらしい。そうか、あれ今年やってたのか。ゲームと言えばBALDR SKYとか、ほかなんかあ…

今年最後の日なので

今から本気だす

話題に乗り遅れ感抜群のlexical_castの話

C++

もとの話はこのあたりとかこのあたり。 いっそのことポリシーとか何も書かなくても良きに図らってよ!というわけで、そういうものを書いてみるなど。 #include <typeinfo> #include <sstream> #include <string> #include <boost/optional.hpp> #include <boost/lexical_cast.hpp>namespace detail { template<typename Target, typename Source> struct lcast_auto_erro</typename></boost/lexical_cast.hpp></boost/optional.hpp></string></sstream></typeinfo>…

Variadic Template Parameters のパラメータの数を制限する

Variadic Template Parameterで対応できない例として、最低N引数以上の可変個引数関数を宣言する一般的な方法、というのを思いだしたんだけど、 template<typename ...Params> decltype( boost::enable_if< boost::mpl::bool_<(sizeof...(Params) > 2)>, int>::type()) f(Params.</typename>…

Boost.勉強会.Aftercare

「質問タイムで回答しか聞こえねー」というご意見をいくつかいただいたので、思いだしながら補足したいと思います。hirataraさんもまとめてくださっていますので、そちらもご覧ください。 あと私のプリプロセッサ関連のエントリーまとめも置いときますね。 …

Boost.勉強会.Log

私のセッション資料はこっちに置いてあります。いくらか手直しました。あと http://www.ustream.tv/channel/boostjp の下のほうに各セッションの録画へのリンクがあります。土日はBoost.勉強会にスピーカーとして参加するべく、東京に行った。 思えばなぜ私…

オーバーロード自動生成ソース

追記:発表の資料にもあった例ですが、make_tupleだと別に非const参照をオーバーロードする必要はないので、型Tのコンストラクタの引数を受けとって、その引数から作ったTの値を保持するmy_smart_ptrを返す関数と変更しておきました。追記ここまで #include <boost/preprocessor/arithmetic/inc.hpp></boost/preprocessor/arithmetic/inc.hpp>…

予測変換は否定しないけど気にいらない

http://cpplover.blogspot.com/2009/12/blog-post_9493.html 予測変換の技術とか、そういうのを否定するつもりはないんだけど、あまり使いたいとは思わないなぁ。 あんまり賢すぎると、自分の知ってる以上のかっこいい日本語とか使ってしまいそうなのがいや…

Befungeを見習って

f >>> g1 &&& (g2 >>> g3) >>> h1 *** h2 >>> first i >>> j1 ||| j2を、 f v v g2 v v g1 &&& v v v v g3 v v h2 j1 v * | * >>> | * | h1 >>>>>> i j2とか書けたら愉快ですね(monospaceなフォントで表示してください)。

BOOST_SCOPE_EXIT_ENDは消せないのか?

C++

http://twitter.com/cpp_akira/status/5995895644 中身は追ってないけど、 BOOST_SCOPE_EXIT_END はどうにかならないのかなー、とか http://twitter.com/DecimalBloat/status/5996160887 SCOPE_EXIT_ENDを消すのは無理っぽいです。詳しく書くとややこしいの…

Functor, Applicative, Foldable, Traversalの練習

class Functor f => Applicative f where pure :: a->f a <*> :: f (a->b)->f a->f b class Foldable t where foldr :: (a->b->b)->b->t a->b foldr f b = foldMap (`f` b) foldMap :: Monoid m => (a->m)->t a->m foldMap f = foldr (mappend . f) mempty c…

loopとfix

話とかは気が向いたら書く… decList x = x:if x == 0 then [] else decList (x - 1) fix $ \f x->x:if x == 0 then [] else f (x - 1) \f x->x:if x == 0 then [] else f (x - 1) fix :: (a->a)->a loop :: a (b, d) (c, d)->a b c fix f = f $ fix f loop f…

最近普通の話を書いてなかったから書き方忘れた

数学ガール ゲーデルの不完全性定理は読み終わった。クワイン。あと論理学をつくるとRWHを気分に応じて読んでいる。そんなことをしているから読み終わる気がしない。それとセッション資料。こっちも素晴らしく進まない。あぁ、そういえば先月新しくTVキャプ…

Boost.勉強会でセッションやります

http://atnd.org/events/1839 には既に書いてありますが、Boost.Preprocessorをお題目に30分ぐらいやります。まぁ時間配分とかは全然分からないので、適当にやります。 何か当日はustでも配信されるらしいので、私の無惨な姿を見たいなら要チェケラ!

タプルの要素数を数える

世間では空前のプリプロセッサブームですね! http://codepad.org/IwJ4sqA9 C++0xの規格を眺めていると、プリプロセッサのセクションに可変長引数リスト付きマクロが入っていたので、これを使って何か面白いことができないかと考えていたところ、タプルの要…

よく分からないなりに

{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, FlexibleInstances #-} data Zero = Zero data Succ n = Succ n _0 = Zero _1 = Succ _0 _2 = Succ _1 _3 = Succ _2 _4 = Succ _3 _5 = Succ _4 type family NthParamType n a :: * type instance NthPar…

フィボナッチ数列をアレする

フィボナッチ数列 fib = 0:1:zipWith (+) fib (tail fib)で、これを新しい名前を作ることなく、かつ無名関数を書かずにやってみる。まずは関数の形になおす。 fib = let fib' x y = x:fib' y (x+y) in fib' 0 1fib'のパターンを書かないように変形する。 fib…