[ create a new paste ] login | about

Link: http://codepad.org/Ol10cCgK    [ raw code | fork ]

C++, pasted on May 4:
//最大公約数を取るテンプレートプログラム

typedef A<0> arg1;//引数エイリアス作成
typedef A<1> arg2;//引数エイリアス作成
typedef V<0> value1;//変数エイリアス作成
typedef V<1> value2;//変数エイリアス作成

//処理ブロックを定義
typedef Cons //ConsはlispのConsと同じ。内部でS式のリストを作成している。
<
        Move< value1,arg1 >//arg1からvalue1へ代入
        ,       
        Move< value2,arg2 >
        ,       
        If      
        <       
                Equal< C<0>,value1 >//Ifの1引数は判定式を取る
                ,       
                Cons//処理ブロック    
                <       
                        Return< arg2 >//値を返す
                >       
        >       
        ,       
        While   
        <       
                //If同様1引数目は、判定式を取る
                Equal< C<0>,Div< Mod< Cons< value1,value2 > > > > 
                ,       
                Cons//処理ブロック    
                <       
                        Move< value2,value1 >
                >       
        >       
        ,       
        Return< value1 >
> program;//プログラムを再利用出きるよう保存する

//テンプレートを実行する。テンプレートで書いたプログラムが実行時かコンパイル時の
//どのタイミングで実行されるかはテンプレートプログラムを解釈するクラス次第。
Execute< program,Cons< C<20>,C<10> > >();

//補足:S式の定義 必要ないので宣言だけして本体は定義しない。
template<class car,class cdr> struct Cell;


Create a new paste based on this one


Comments: