Rumah > Artikel > hujung hadapan web > Bagaimana untuk Menggantikan While Loops dalam Pengaturcaraan Fungsional Tanpa Pengoptimuman Panggilan Ekor?
Cara Menggantikan While Loop dengan Alternatif Pengaturcaraan Berfungsi tanpa Pengoptimuman Panggilan Ekor
Dalam pengaturcaraan berfungsi, manakala gelung sering digantikan dengan rekursi atau fungsi utiliti. Walau bagaimanapun, tanpa pengoptimuman panggilan ekor, yang mengurangkan overhed panggilan rekursif, mencari alternatif berfungsi untuk gelung sementara boleh menjadi mencabar.
Satu pendekatan ialah mencipta fungsi utiliti "semasa". Walau bagaimanapun, ini boleh menjadikan kod lebih rumit. Pilihan lain ialah menggunakan fungsi penjana dan mengulanginya menggunakan fungsi utiliti. Walau bagaimanapun, mencari cara yang boleh dibaca untuk melakukan ini boleh menjadi sukar.
Akhirnya, strategi terbaik bergantung pada senario tertentu. Jika gelung boleh dinyatakan sebagai fungsi rekursif, rekursi mungkin merupakan pilihan yang sesuai. Jika tidak, menggunakan gelung sementara mungkin lebih mudah.
Contoh dalam JavaScript
Dalam JavaScript, yang pada masa ini tidak mempunyai pengoptimuman panggilan ekor, coretan berikut menunjukkan cara fungsi utiliti "semasa" boleh dilaksanakan:
<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>
Dalam contoh ini, fungsi ulangan mengambil integer n, fungsi f dan nilai awal x. Ia berulang kali menggunakan f kepada x sehingga n menjadi sifar. Tanpa pengoptimuman panggilan ekor, melaksanakan fungsi ini dengan n yang besar akan mengakibatkan ralat limpahan tindanan.
Atas ialah kandungan terperinci Bagaimana untuk Menggantikan While Loops dalam Pengaturcaraan Fungsional Tanpa Pengoptimuman Panggilan Ekor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!