#!/usr/bin/ruby

func chebft (callback, a, b, n) {

    var bma = (0.5 * b-a);
    var bpa = (0.5 * b+a);

    var pi_n = ((@^n »+» 0.5) »*» (Num.pi / n));
    var f = (pi_n »cos»() »*» bma »+» bpa «call« callback);
    var sums = (@^n «run« {|i| f »*« ((pi_n »*» i) »cos»()) «+» });

    sums »*» (2/n);
}

chebft(func(v){v.cos}, 0, 1, 10).each { |v|
    say ("%+.10e" % v);
};