2012-08-09

SCIP in C++11 ― 2.2.2節 その4


冪集合:問題2.32

ここもlisttupleではえらい苦労した部分。
今やすっきり。

-----
typedef List Set;
typedef List SetList;

const SetList subsets(const Set& s)
{
    if(isNull(s)){return(makeList(makeList()));}

    const SetList rest(subsets(cdr(s)));
    const function<SetList(Set)> addCar2SetList=
        [s](const Set& x){return(cons(car(s),x));};
    return(append(rest,mapping(addCar2SetList,rest)));
}

int main(int argc, char** argv)
{
    const auto list1(makeList(1,2,3));
    cout<<"x = "<<listString(list1)<<endl;
    const auto subsetList(subsets(list1));
    cout<<"2^x = "<<listString(subsetList)<<endl;

    return(0);
}
----
出力
----
x = (1 2 3)
2^x = (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))

0 件のコメント :

コメントを投稿