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

.dotfilesに.emacs.dを結合する

はじめに 前略 無知な私は.dotfilesと.emacs.dを別々のリポジトリで管理していたので いい加減に統合したいと思います 早々 いろいろ調べて得られた知見(セオリー)としては 1.別ブランチに移動してコピー 2.masterにマージ という様にブランチを一手間…

cygwin上に環境構築

はじめに ただのメモです LinuxMintで構築してきたterminal環境をcygwin上に構築したかった セットアップ 64bit版のsetup.exeを公式よりダウンロード 起動して進めて行く パッケージのアクセスサーバーはなんとなくIIJさんのサーバーを選択 インストールする…

LinuxMint17(MATE版)をVirutalboxに導入する際のメモ1

インストール 指示に従って、ポチポチとクリック。virtualboxの設定などは割愛 (スナップショット) (忘れた) 更新 おなじみのコマンド $ sudo apt-get update $ sudo apt-get dist-upgrade 結構待った。 再起動 (スナップショット) Guest Additional 必要な…

GADT記法+tagをC++で

GADTとは Generalized Algebraic DataTypes(GADT)と言うHaskellの記法(?)を知りました Haskellの入門書などで出てくるMaybe型は以下のような定義になっています data Maybe a = Nothing | Just a これをGADTで書くと以下のようになるそうです data Maybe a…

Haskellの<$>と<*>をC++で書いてみる

はじめに これは実用的でゎなぃ 無駄にcompile-timeを増やしているだけな気が もともとは<$>演算子と<*>演算子を定義できないかな? って思って試しに検討してみたものです C++では、オーバーロードできる演算子が制限されているので もちろんこんな事はでき…

勝手にplaceholderを補正してくれるbind

前回作ったmake_placeholderを利用したもの http://melpon.org/wandbox/permlink/gz7q4bMgPhLh9Xz7 Generic lambdaを使用したもの http://melpon.org/wandbox/permlink/KaCm31pYSekzuvSc 参考: http://d.hatena.ne.jp/osyo-manga/20131110/1384095746

N個のplaceholderを作って展開する

はじめに 任意の関数型変数を引き数として受取り、 第1引数を1にbindしてretrunする方法に関してのメモです template<typename R, typename A,typename... Args> auto bind_1_1(std::function<R(A,Args...) f> { return //std::bind(f,1,make_placeholders<Args...>{}...); //理想イメージ } int main() { std::function<int(int,int,int,int)> f = []</int(int,int,int,int)></args...></r(a,args...)></typename>…

memo

http://melpon.org/wandbox/permlink/mv3a6JZ7oiyWAGnL

HaskellをC++で書いてみる(getLineとputStrLineとIO型とMonad型クラス)

はじめに また性懲りもなく 今回は以前にもまして穴だらけですが いつか理解できるまでの手前用のメモとして IO型 (いつかリベンジしたい) Haskellでは以下のように定義されています --data IO a *->* newtype IO a = IO (State# RealWorld -> (# State# R…

constexprとlambda式

私的メモ clangとgccで挙動が全く違います しかも私自身規格を読んでいないので、 どちらが正しいのか全くわかっていません http://melpon.org/wandbox/permlink/lUzXqVVTIf7dglD9 あとで何とかする 追記:どうやらconstexprはリテラルでないといけなくて リ…

HaskellをC++で書いてみる(多相型(Maybe型)とFunctor型クラス)

はじめに 前回、単相型(具体型)とEq型クラスを作ったので 今回は多相型とFunctor型クラスを作成します 多相型(polymorphic type)に関して 例えばHaskellのList型は [1,2,3,4]でも[1.0,2.0,3.0,4.0]でも['1','2','3','4']でも どんな型でもListと呼ばれます…

HaskellをC++で書いてみる(型クラス)

はじめに お勉強のために Eqを創ってみる 型クラスとは 私は現時点では「Concept」のようだという印象を受けております 「その型(クラス)はどの関数で使用できるのか」とドキュメントであり かつ静的チェッカーの役割を担っているものだと Eqとは? 等価性を…

Variadic Templateの(僕が今更ながら新しく知った)使い方

知った事など 継承させる struct Base1{}; struct Base2{}; // すべての型引数を継承 template<typename... Args> struct Derived : Args... { int a; }; int main(){ Derived<Base1,Base2> a; } mapして包含する(直接保持は無理) struct Base1{}; struct Base2{}; template<typename... Ts> struct holder</typename...></base1,base2></typename...>…

tupleの実装(5.26)

途中経過 http://melpon.org/wandbox/permlink/iKjxuweUPGP5Py9x

tuple<typename T, int N>

C++

tuple_n<int,3>でtuple<int,int,int>になる型エイリアス http://melpon.org/wandbox/permlink/2WpxZNuDV1qNTrX2 使い所不明です</int,int,int></int,3>

map<T,U&>で参照型コンテナ

C++

std::map<T,U&> 知らなかった http://melpon.org/wandbox/permlink/0DxxCiaJpUKWw9nJ</t,u&>

Class Templateでの型推論

C++

function templateの型推論 function templateでは関数呼び出し時の引数によって型が推論されます template<typename T> T pow(T a,T b) return (b!=1) ? a : pow(a*a,b-1); } main(){ int a=3,b=3 pow(a,b); //pow<int>と推論される } class templateの型推論できない? 一方</int></typename>…

typeid().name()の出力

C++

g++ではtype_info::name()で出力される 型名が人類には早すぎる文字列で出力されています #include<iostream> #include<typeinfo> int main(){ std::cout << typeid([](int)->int{}).name() << std::endl; // 型直接渡してもよい std::cout << typeid(int).name() << std::endl; </typeinfo></iostream>…

型安全の世界

最近、boost::any、boost::shard_ptrの実装やBoost.TypeErasureの仕様書などを見て、 構造化され、ネストされた構造体や関数の中に「型安全の世界」があることにようやく気がつき始めました。 (情報科学ではこういうことを学ぶのでしょうか?) 何言ってる…

shared_ptrの便利なところその2

C++

その1はどこ? その1(auto-delete)に関しては私が書く必要がないので省略する 本題 動的ポリモーフィズムをするときに役立つ特性を持っています 生ポインタで動的ポリモーフィズムするときにめんどくさい事 struct Base{}; struct Derived : Base {}; int…

Default template parameter を含んだ場合の class template の部分特殊化

C++

メモ http://melpon.org/wandbox/permlink/E4zsyZ3fo2p9VBYq

クラステンプレートの部分特殊化

C++

部分特殊化したときのtypename Tは何型なのか? // template<typename T> class A { vector<T> v_; }; // 引数がポインタの場合 template<typename T> class A<T*> { vector<T*> v_; }; // 引数がT constの場合 template<typename T> class A<T const> { //vecotr<T const> v_ // これはill-formed vector<T> v_; }; int main() { A<int></int></t></t></t></typename></t*></t*></typename></t></typename>…

プログラミング言語にほしい言語機能

ただの雑感です 最近C++やC#以外の言語を調べているので、その中で「良いな~」と思ったものを 適当にリストアップしてみました switch-caseの亜種 GoやHaxeのswitch-caseは基本的にbreakが要らない仕様になっています わざわざ書かなくても勝手に排他的制御…

CentOSインストールメモ

CentOSが必要になったのでインストールメモ virtualboxに入れました 1.ダウンロード 公式ホームページからミラーに飛んでDLしました DVDISO1をDLしました http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.5/isos/x86_64/ ちなみに、DVDISO2はなぜか使用しませ…

乱数

C++

現在トークンを任意の座標に配置するプログラムを生成しています ふとランダムに配置する関数も評価用に必要かな?と思いましたので 標準ライブラリにある<random>を使ってみようと思います 乱数 rondom_deviceクラスの変数を宣言すると勝手に乱数が出来上がっている</random>…

代入演算子のconstexpr

C++

前の記事で=defaultでかってにimmutableクラスになる例を挙げましたが もちろん自分でoperator=関数を実装すれば、mutable関数にする事ができます #include <iostream> #include <utility> struct A { const int a_; A():a_(0){}; constexpr A(int a):a_(a){} ~A()=default; A(c</utility></iostream>…

代入演算子の=defaultが=deleteになるケース

C++

さっきまで嵌っていたのですが constメンバを含む関数で代入演算子を=defaultで自動実装させた場合 勝手に=deleteになってしまうようです 良く考えれば、constメンバに代入する事ができないため、妥当な処理なのですが しばらく気が付きませんでした・・・・…

LinuxMintで検索エンジンを増やす

Linux版Firefoxのメモ LinuxMint16のFirefoxのナビゲーションバーの検索窓にはデフォルトでは「DuckDuckGo」 しか入っていません。 他の検索機能(Google検索など)を使用したい場合には 別途増やす必要がありますが 以下のサイトを使用すれば、簡単に拡張で…

template classのfriend関数をクラス内部で実装する

C++

テンプレートクラスを作成し、その演算子などを非メンバ関数で定義する場合 往々にして、friend関数にする場合が多いと思います これが厄介で、まずテンプレートクラスの前方宣言をします その後にテンプレート関数として目的のfriend関数を前方宣言します …

const参照引数

以下の関数呼び出しはコンパイルエラーにも実行時エラーにもなりません template<typename T> T add(const T& x,const T& y) { return x+y; } int main() { auto a = add(10,11); //rvalue渡し } lvalue引数にrvalueを渡しているのだから エラーになりそうなものですが T</typename>…