• Tidak ada hasil yang ditemukan

Format Khusus Built-In

Dalam dokumen Buku bhs pemrograman Q Equational 2018 (Halaman 99-101)

9 Format Khusus

9.3 Format Khusus Built-In

Di samping streams, bahasa Q mempunyai sejumlah operasi built-in lain yang benar-benar diterapkan dari sebagai format khusus. Ini perlu, khususnya, di dalam kasus penghubung logika

and then dan or else yang dievaluasi di dalam “short-circuit mode”, penggunaan equations/

penyamaan built-in berikut (lihat Bagian 6.4.5 [Logika dan Operator Bit], halaman 44):

true and then X = X; false and then X = false; false or else X = X; true or else X = true;

argument pertama dari operasi ini adalah tidak khusus, tetapi yang kedua adalah suatu argument khusus yang hanya dievaluasi jika [itu] diperlukan. Sebagai contoh, jika argument pertama dari and then adalah false, false dikembalikan–tidak usah di argument yang kedua. false is returned

–there is no need to take a look at the second argument.

operasi ini atau operasi yang lain bekerja tidak sejalan/analogously. Aturan ini mengijinkan interpreter Q untuk melaksanakan pengurangan berikut dengan seketika, tanpa pernah mempunyai untuk mengevaluasi argument yang kedua X:

false and then X => false true or else X => true

Pada sisi lain, jika argument pertama dari and then adalah true (atau argument pertama dari or else adalah false), maka kemudian nilai dari argument kedua dikembalikan:

true and then X => X false or else X => X

Dalam hal ini interpreter juga melaksanakan optimisasi hubungi/panggil tail/ekor (tail call optimization), yaitu, pengurangan ke X benar-benar dilaksanakan sebelum X dievaluasi. Ini menyiratkan bahwa recursions tail menyertakan and then dan or else dieksekusi di dalam ruang tumpukan tetap (constant stack space), seperti salah satu yang mungkin layak harapkan (one might reasonably expect).

(berlaku yang sama untuk format khusus user-defined seperti ifelse, lihat Bagian 9.1 [Konsep Dasar], halaman 83, yang digambarkan di dalam suatu pertunjukan serupa.) Sebagai contoh, pertimbangkan contoh berikut dari standard library yang menggambarkan suatu semua fungsi yang memeriksa apakah semua anggota dari suatu list mencukupi sebutan/predicate P yang ditentukan:

all P [] = true;

all P [X|Xs] = P X and then all P Xs;

Catat bahwa jika P X di dalam aturan yang kedua mengevaluasi ke true, kemudian sisi tangan kanan (the right-hand side) dengan seketika mengurangi/menurunkan tail-recursive panggil semua P Xs, dan karenanya suatu aplikasi dari semua P untuk suatu list dari ukuran arbitary hanya memerlukan ruang tumpukan tetap (constant stack space).

Format khusus Built-In penting yang lain tentu saja adalah fungsi lamda, yang diuraikan di Bagian 10.6 [Abstraksi lamda], halaman 102. Yang terakhir tapi bukan tidak penting, ada tiga builtins lain di dalam bahasa Q yang boleh juga bertindak sebagai format khusus yang tergantung pada argument di mana mereka dilibatkan. Operator komposisi fungsi ‘.’ Secara automagically menyesuaikan ke format khusus dalam operand kiri dan/atau kanan nya. Lebih tepatnya, jika argument yang pertama dari suatu fungsi F adalah khusus, kemudian operand yang kedua dari suatu bagian komposisi format (F.) = (.) F adalah khusus juga; dalam hal ini F.G akan selalu meninggalkan G tidak dievaluasi. Lagipula, argument dari suatu komposisi F.G adalah khusus jika F atau G mempunyai suatu argument pertama yang khusus. Ini membuat operator‘.’ bekerja seperti yang diharapkan di dalam situasi di mana fungsi yang disusun adalah format khusus. Operator aplikasi sisipan/infix ‘$’ (cf. Bagian 6.4.7 [Operator Aplikasi dan Uargument pertama dari operasi ini adalah tidak khusus, tetapi yang kedua adalah suatu argument khusus yang hanya dievaluasi jika [itu] diperlukan. Sebagai contoh, jika argument pertama dari and then adalah false, false dikembalikan– tidak usah di argument yang kedua. false is returned–there is no need to take a look at the second argument.

operasi ini atau operasi yang lain bekerja tidak sejalan/analogously. Aturan ini mengijinkan interpreter Q untuk melaksanakan pengurangan berikut dengan seketika, tanpa pernah mempunyai untuk mengevaluasi argument yang kedua X:

Pada sisi lain, jika argument pertama dari and then adalah true (atau argument pertama dari or else adalah false), maka kemudian nilai dari argument kedua dikembalikan:

Dalam hal ini interpreter juga melaksanakan optimisasi hubungi/panggil tail/ekor (tail call optimization), yaitu, pengurangan ke X benar-benar dilaksanakan sebelum X dievaluasi. Ini menyiratkan bahwa recursions tail menyertakan and then dan or else dieksekusi di dalam ruang tumpukan tetap (constant stack space), seperti salah satu yang mungkin layak harapkan (one might reasonably expect).

(berlaku yang sama untuk format khusus user-defined seperti ifelse, lihat Bagian 9.1 [Konsep Dasar], halaman 83, yang digambarkan di dalam suatu pertunjukan serupa.) Sebagai contoh, pertimbangkan contoh berikut dari standard library yang menggambarkan suatu semua fungsi yang memeriksa apakah semua anggota dari suatu list mencukupi sebutan/predicate P yang ditentukan:

all P [] = true;

all P [X|Xs] = P X and then all P Xs;

Catat bahwa jika P X di dalam aturan yang kedua mengevaluasi ke true, kemudian sisi tangan kanan (the right-hand side) dengan seketika mengurangi/menurunkan tail-recursive panggil semua P Xs, dan karenanya suatu aplikasi dari semua P untuk suatu list dari ukuran arbitary hanya memerlukan ruang tumpukan tetap (constant stack space).

Format khusus Built-In penting yang lain tentu saja adalah fungsi lamda, yang diuraikan di Bagian 10.6 [Abstraksi lamda], halaman 102. Yang terakhir tapi bukan tidak penting, ada tiga builtins lain di dalam bahasa Q yang boleh juga bertindak sebagai format khusus yang tergantung pada argument di mana mereka dilibatkan. Operator komposisi fungsi ‘.’ Secara

automagically menyesuaikan ke format khusus dalam operand kiri dan/atau kanan nya. Lebih tepatnya, jika argument yang pertama dari suatu fungsi F adalah khusus, kemudian operand yang kedua dari suatu bagian komposisi format (F.) = (.) F adalah khusus juga; dalam hal ini F.G akan selalu meninggalkan G tidak dievaluasi. Lagipula, argument dari suatu komposisi F.G adalah khusus jika F atau G mempunyai suatu argument pertama yang khusus. Ini membuat

operator ‘.’ bekerja seperti yang diharapkandi dalam situasi di mana fungsi yang disusun adalah

format khusus. Operator aplikasi sisipan/infix ‘$’ (cf. Bagian 6.4.7 [Operator Aplikasi d

rutan (Application and Sequence Operators)], halaman 47) dan fungsi flip builtin(yang menghempaskan argument dari suatu fungsi biner dan digunakan untuk menerapkan bagian operator dengan suatu operand kiri yang hilang, lihat Bagian 10.8 [Miscellaneous Functions], halaman 111) melakukan penyesuaian kepada (fungsi) argument pertama mereka di dalam suatu pertunjukan serupa.

Dalam dokumen Buku bhs pemrograman Q Equational 2018 (Halaman 99-101)