테일 호출 최적화 없이 While 루프를 함수형 프로그래밍 대안으로 바꾸는 방법
함수형 프로그래밍에서 while 루프는 종종 재귀 또는 유틸리티 기능. 그러나 재귀 호출의 오버헤드를 줄이는 꼬리 호출 최적화가 없으면 while 루프에 대한 기능적 대안을 찾는 것이 어려울 수 있습니다.
한 가지 접근 방식은 "while" 유틸리티 함수를 만드는 것입니다. 그러나 이로 인해 코드가 더 복잡해질 수 있습니다. 또 다른 옵션은 생성기 함수를 사용하고 유틸리티 함수를 사용하여 이를 반복하는 것입니다. 그러나 읽기 쉬운 방법을 찾는 것은 어려울 수 있습니다.
궁극적으로 최선의 전략은 특정 시나리오에 따라 다릅니다. 루프를 재귀 함수로 표현할 수 있다면 재귀가 적합한 옵션이 될 수 있습니다. 그렇지 않은 경우 while 루프를 사용하는 것이 더 간단할 수 있습니다.
JavaScript의 예
현재 tail call 최적화가 부족한 JavaScript에서 다음 스니펫은 "while" 유틸리티 함수를 구현할 수 있습니다.
<code class="javascript">const repeat = n => f => x => n === 0 ? x : repeat (n - 1) (f) (f(x)) console.log(repeat(1e3) (x => x + 1) (0)) // 1000 console.log(repeat(1e5) (x => x + 1) (0)) // Error: Uncaught RangeError: Maximum call stack size exceeded</code>
이 예에서 반복 함수는 정수 n, 함수 f 및 초기 값 x를 사용합니다. n이 0이 될 때까지 x에 f를 반복적으로 적용합니다. 테일 호출 최적화 없이 큰 n을 사용하여 이 함수를 실행하면 스택 오버플로 오류가 발생합니다.
위 내용은 테일 콜 최적화 없이 함수형 프로그래밍에서 While 루프를 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!