kond
Dalam Scheme, kondisional cond digunakan untuk memilih salah satu dari beberapa blok kode yang mungkin untuk dieksekusi, berdasarkan beberapa pengujian. Ibaratnya multi-cabang if, dimana setiap cabang diperiksa secara berurutan hingga ditemukan kecocokan.
Sintaks
(cond
(test-1 consequent-1)
(test-2 consequent-2)
...
(else fallback-consequent))- Setiap tes dievaluasi sesuai urutan penulisannya.
- Saat pengujian bernilai benar (
#t), konsekuen terkait akan dijalankan, dan ekspresicondberhenti mengevaluasi pengujian lebih lanjut. - Klausa
elsebersifat opsional dan berfungsi sebagai cadangan jika tidak ada pengujian yang bernilai benar.
Cara Kerjanya
Uji Setiap Kondisi:
condmengevaluasi tes sesuai urutannya.
Jalankan Konsekuensi Pencocokan:
- Saat pengujian pertama yang bernilai true (
#t) ditemukan, konsekuensinya akan dijalankan. - Jika tidak ada pengujian yang bernilai benar dan terdapat klausa
else, konsekuensi fallback akan dieksekusi.
- Saat pengujian pertama yang bernilai true (
Contoh
Contoh 1: Konsekuensi Ekspresi Tunggal
(cond
((< 3 2) "This won't run")
((= 3 3) "This will run")
(else "Fallback"))- Tes pertama
(< 3 2)bernilai salah (#f). - Tes kedua
(= 3 3)bernilai benar (#t), sehingga"This will run"dikembalikan. - Klausa
elsetidak dijalankan karena sudah ditemukan kecocokan.
Hasil: “Ini akan berjalan”
Contoh 2: Beberapa Tindakan Menggunakan begin
Jika konsekuensi melibatkan beberapa tindakan, gunakan begin untuk mengelompokkannya:
(cond
((< 5 3)
(begin
(lumi-message "This won't run")
(* 2 3)))
((> 5 3)
(begin
(lumi-message "Condition met")
(* 5 5)))
(else
(begin
(lumi-message "Fallback")
0)))- Tes pertama
(< 5 3)bernilai salah (#f). - Tes kedua
(> 5 3)bernilai benar (#t):- Mencetak
"Condition met". - Kemudian menghitung
(* 5 5)dan mengembalikan25.
- Mencetak
Hasil: Mencetak “Kondisi terpenuhi” dan mengembalikan 25.
Contoh 3: Menggunakan Blok let dalam Konsekuensi
Saat Anda perlu memperkenalkan variabel lokal, gunakan blok let:
(cond
;; Kasus 1: Jika 0 kurang dari -1
((< 0 -1)
(let ((x 10))
(* x x)))
;; Kasus 2: Jika 0 lebih besar dari -1
((> 0 -1)
(let ((y 20))
(lumi-message "Positive condition met")
(+ y y)))
;; Kasus default: Jika tidak ada kondisi di atas yang terpenuhi
(else
(let ((z 0))
z)))- Tes pertama
(< 0 -1)salah. - Tes kedua
(> 0 -1)benar, jadi:- Blok
letdijalankan, mengikatyke20. - Mencetak
"Positive condition met". - Kemudian menghitung
(+ y y)dan mengembalikan40.
- Blok
Hasil: Mencetak “Kondisi positif terpenuhi” dan menghasilkan 40.
Contoh 4: Penggantian dengan else
(cond
((< 5 3) "This won't run")
((= 5 3) "This won't run either")
(else "Fallback value"))- Tak satu pun dari dua tes pertama yang bernilai benar.
- Klausa
elsedijalankan dan mengembalikan"Fallback value".
Hasil: “Nilai cadangan”
Ringkasan
- Gunakan
conduntuk menangani berbagai kondisi secara jelas dan ringkas. - Konsekuensi dapat berupa ekspresi tunggal atau tindakan berkelompok menggunakan
begin. - Gunakan
letsebagai konsekuensi untuk mendeklarasikan variabel lokal untuk perhitungan. - Selalu sertakan klausa
elsesebagai cadangan untuk menangani kasus yang tidak terduga.
Fleksibilitas ini menjadikan cond alat yang kuat dan mudah dibaca untuk menangani logika percabangan yang kompleks.