Cara menggunakan compiler Clojure online
- Tulis atau tempel kode Clojure ke editor. Reset contoh mengembalikan program awal berisi faktorial, daftar map yang terurut,
frequencies, dan pipeline->>. - Tekan Jalankan atau gunakan Ctrl + Enter (⌘ + Enter di Mac).
- Teks yang dicetak dengan
printlnmuncul di panel Output. Setelah dijalankan, nilai form terakhir dicetak sebagai=> ...dalam bentukpr-stryang mudah dibaca. Jika nilainyanil, misalnya saat program berakhir denganprintln, tidak ada tambahan yang ditampilkan. Kesalahan ditampilkan beserta pesannya. - Pilih batas waktu 5, 15, atau 60 detik, atau tekan Hentikan untuk mengakhiri proses lebih awal.
Saat pertama kali dijalankan, halaman mengunduh interpreter yang berukuran sekitar 1 MB. Salin dan main.cljs menyimpan kode Anda, dan A−/A+ mengubah ukuran teks.
Semuanya berjalan di Web Worker di browser Anda. Kode Anda tidak pernah dikirim ke server. Editor menyimpan otomatis program terakhir Anda di browser, terpisah untuk setiap compiler.
Tentang Clojure, ClojureScript, dan SCI
Clojure adalah Lisp modern yang dibangun di sekitar struktur data immutable dan pemrograman fungsional. Clojure asli berjalan di Java Virtual Machine, dan ClojureScript adalah versi yang menargetkan JavaScript. Halaman ini memakai Scittle 0.8, yang mengemas SCI, Small Clojure Interpreter, untuk browser. SCI menafsirkan kode Anda langsung dengan semantik ClojureScript, tanpa JVM atau alat build apa pun.
Yang didukung
- Definisi dan alur kontrol:
def,defn,fndan literal#(...),let,if,when,cond, sertaloop/recur. - Koleksi persisten: map, vector, set, dan list, keyword, serta destructuring pada
letdan argumen fungsi. - Fungsi sequence, termasuk
map,filter,reduce,sort-by,group-by, danfrequencies, ditambah lazy sequence sepertirangedaniterate. - Threading macro
->dan->>, serta atom untuk state mutable yang terkelola. - Interop JavaScript bergaya ClojureScript, seperti pada
(js/Math.sqrt 16)atau(.toUpperCase "abc").
Keterbatasan:
- Tanpa interop JVM. Kelas seperti
java.util.DateatauThreadtidak ada. - Tanpa Leiningen atau deps.edn. Library eksternal tidak bisa ditambahkan, jadi hanya kode di editor dan namespace bawaan yang tersedia.
- Tanpa kotak input dan tanpa DOM. Tentukan data uji Anda di dalam program.
Contoh: immutability dan threading
(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory) ; {:apples 3, :pears 0} (tidak berubah)
(println restocked) ; {:apples 3, :pears 12}
(def counter (atom 0))
(dotimes [_ 5] (swap! counter inc))
(println @counter) ; 5
(->> [3 8 1 9 4]
(filter odd?)
(map #(* % 10))
(reduce +)) ; => 130
assoc mengembalikan map baru dan membiarkan yang asli tidak berubah. Jika Anda butuh nilai yang berubah seiring waktu, simpan di dalam atom dan perbarui dengan swap!. Form terakhir adalah pipeline ->>. Pipeline ini meneruskan vector melalui setiap langkah sebagai argumen terakhir, dan hasilnya dicetak sebagai => 130. Gunakan -> sebagai gantinya jika nilai itu harus menjadi argumen pertama, seperti pada assoc dan update untuk sebuah map.
Perbedaan dari Clojure JVM dan jebakan yang umum
- Angka adalah angka JavaScript. Dengan semantik ClojureScript tidak ada rasio atau integer besar.
(/ 1 3)menghasilkan0.3333333333333333, dan integer yang sangat besar kehilangan presisi. - Tidak ada tipe karakter tersendiri. Literal karakter seperti
\aadalah string satu huruf, sehingga(frequencies "mississippi")memiliki key berupa string. - Laziness menyembunyikan efek samping.
(map println xs)bisa tidak mencetak apa pun jika hasilnya tidak pernah dipakai. Gunakandoseqataurun!untuk efek samping. - Sequence tak hingga.
(range)daniteratetidak pernah berakhir, jadi selalu batasi dengantake. Jika Anda mencetak sequence tak hingga, proses terus berjalan sampai batas waktu menghentikannya. printlnvsprn.printlnmencetak string di dalam koleksi tanpa tanda kutip.prnmempertahankan tanda kutip, sehingga data lebih mudah dibaca.
Pertanyaan yang sering diajukan
Apakah ini Clojure yang sebenarnya?
Ini adalah kode Clojure yang dijalankan oleh SCI dengan semantik ClojureScript, bukan implementasi JVM. Bahasa inti, koleksi, dan library sequence bekerja dengan cara yang sama, sehingga sebagian besar kode Clojure murni berjalan tanpa perubahan. Interop Java dan perilaku khusus JVM tidak berfungsi.
Bisakah saya menambahkan library atau memakai file proyek?
Tidak. Leiningen, deps.edn, dan dependensi Maven tidak tersedia. Setiap proses menafsirkan satu file di editor.
Mengapa file ini bernama main.cljs?
Karena kode berjalan dengan semantik ClojureScript. Anda bisa menempelkan isinya ke file .clj atau .cljc, selama tidak bergantung pada interop JavaScript.
Bahasa lain apa yang bisa saya coba?
Interpreter Scheme Online adalah Lisp lain yang bisa dijelajahi. Untuk JavaScript sendiri, gunakan Compiler JavaScript Online, atau lihat semua compiler online.
Diperbarui