제목이 잘못되었으므로이 질문을 설명하는 방법을 모릅니다. 몇 가지 코드 예제를 통해고급 함수 C#의 Lambda/LINQ 식과의 혼동
오전 읽고 다음과 같은 리턴 기능을 통해 혼란 스러워요 :
Func<Func<int , bool>, Func<int , int>, Func<int , int>> Loop = null ;
Loop = (c , f) => n => c(n) ? Loop(c , f) (f (n)): n;
Func<int , int> w = Loop(n => n < 10 , n => n + 2);
var r = w(2);
var s = w(3);
Console . WriteLine ("{0} {1}" , r , s);
내가 C (n)이 true로 평가되면이 기능은 루프를 반환하는 것을 이해하지만, 이해가 안 돼요 루프 (c, f) (f (n))가 어떻게 평가되는지 - 둘 다 루프로 다시 전달 되는가? Linqpad에서 덤프를 실행하려고 시도했지만 그 비트가 어떻게 실행되고 있는지 알 수 없습니다.
도움이 될 것입니다, 아마도 이것은 바보 같은 질문입니다!
아! 그래서 Loop (c, f) (f (n)) 문법은 Loop (c, f)를 호출하기위한 조건으로 f (n)을 호출하고 있는가? 나는 그 구문이 어떻게 작동 하는지를 고민하고있다. – user3431504
나는 그것을 "recall Loop"이라고 부르지 않을 것입니다 - 아마도 "condition"을 "다음 반복의 값"으로 사용했을 것입니다 ...'loop (c, f)'는'basicLoop '하나. 'f (n)'은'f' 함수를 호출하는 것입니다. ... combine -'Loop (c, f) (f (n))'는'Loop (c, f)'를 호출하고 결과는'f n)'... 또는 다른 말로하면 - 루프의 다음 반복시에 'n'이 있어야합니다 ... –
각 호출을 기록하는 함수를 조건'n => {Console.WriteLine ("Condition {0} ", n); n <10;}'을 반환하고 얼마 동안 출력을 응시합니다 ... –