...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

stdex.bind - dmd 2.015

これまでに何度もstd.bindを復活させようとしてきてその度に失敗してきた.
けど,ようやく簡単な関数ならbindできるようになったよ.
フルスクラッチ

import std.stdio;
import stdex.bind;

T[] removeIf(alias cond, T)(T[] arr)
{
    T[] ret;
    foreach (v; arr)
        if (!cond(v)) ret ~= v;
    return ret;
}

void main()
{
    int[] arr = [1,2,3,4,5,6,7,8,9];
    auto less = (int i, int j){return i<j;};
    auto lessThan6 = bindAlias!(less)(_0, 6);
    auto greaterThan5 = bindAlias!(less)(5, _0);
    writefln(removeIf!(lessThan6)(arr));
    writefln(removeIf!(greaterThan5)(arr));
    
    static int sub(int a, int b){return a-b;};
    //auto a = bindAlias!(sub)(_0, _1);
    //auto b = bindAlias!(sub)(_1, _0);
    auto c = bindAlias!(sub)(_0, 5);
    auto d = bindAlias!(sub)(10, _0);
    auto e = bindAlias!(sub)(10, 5);
    //writefln(a(10,5));
    //writefln(b(10,5));
    writefln(c(10));
    writefln(d(5));
    writefln(e());
}
/*
[6 7 8 9]
[1 2 3 4 5]
5
5
5
*/

コメントアウトしてる部分はまだできない><;