2008-11-13 9 views
4
요즘 람다 표현식에 대한 자세한 내용을 시도하고있다

하고 재미있는 운동의 생각 ... 람다 표현식 운동

이 같은 C++ 통합 기능을 단순화하는 방법이 :

// Integral Function 
double integrate(double a, double b, double (*f)(double)) 
{ 
    double sum = 0.0; 

    // Evaluate integral{a,b} f(x) dx 
    for(int n = 0 ; n <= 100; ++n) 
    { 
     double x = a + n*(b-a)/100.0; 
     sum += (*f)(x) * (b-a)/101.0; 
    } 
    return sum; 
} 

C# 및 람다 식을 사용하여? 이것에 대해

답변

6

무엇 :

public double Integrate(double a,double b, Func<double, double> f) 
{ 
    double sum = 0.0; 

    for (int n = 0; n <= 100; ++n) 
    { 
     double x = a + n * (b - a)/100.0; 
     sum += f(x) * (b - a)/101.0; 
    } 
    return sum; 
} 

테스트 :를 호출 할 때, 언급 한 바와 같이

Func<double, double> fun = x => Math.Pow(x,2);   
    double result = Integrate(0, 10, fun); 
+0

hehe - 서로 몇 초 내에 --p –

0

진정한 힘은 온다. 예를 들어,

static double Integrate(double a, double b, Func<double, double> func) 
    { 
     double sum = 0.0; 

     // Evaluate integral{a,b} f(x) dx 
     for(int n = 0 ; n <= 100; ++n) 
     { 
      double x = a + n*(b-a)/100.0; 
      sum += func(x) * (b - a)/101.0; 
     } 
     return sum; 
    } 

이어서 C에서 # :

double value = Integrate(1,2,x=>x*x); // yields 2.335 
    // expect C+(x^3)/3, i.e. 8/3-1/3=7/3=2.33... 
2

람다 Powa! 이 (그냥 그 람다 물건을 좋아 없음 C#을 프로그래머!)

(a, b, c) => { 
    double sum = 0.0; 
    Func<double, double> dox = (x) => a + x*(b-a)/100.0; 

    // Evaluate integral{a,b} f(x) dx 
    for(int n = 0 ; n <= 100; ++n) 
     sum += c(dox(n)) * (b-a)/101.0; 

    return sum; 
} 

이 좋아 잘 없기 때문에 코드가 C++, 왜 그것을 ++ 및 람다를 얻을 C 유지되지 않은 상태에서 내가 생각인지 확실하지? 다음은 C++ 0x를 찾는 방법입니다. 표준으로 곧 출시 될 예정입니다.

static double Integrate(double a, double b, function<double(double)> f) 
{ 
    double sum = 0.0; 

    // Evaluate integral{a,b} f(x) dx 
    for(int n = 0; n < 100; ++n) { 
     double x = a + n * (b - a)/100.0; 
     sum += f(x) * (b - a)/101.0; 
    } 
    return sum; 
} 

int main() { 
    Integrate(0, 1, [](double a) { return a * a; }); 
}