Prolog Online - IDE, Editor, Compiler, Interpreter

Jalankan program Prolog secara online dengan SWI-Prolog yang dikompilasi ke WebAssembly: fakta, aturan, rekursi, findall, dan format, dengan error dan peringatan ditampilkan.

SWI-Prolog 10 (swipl-wasm) · Berjalan di browser Anda, sehingga kode Anda tidak pernah sampai ke server kami.
main.plProlog
Output

            
        
Ctrl/⌘ + Enter untuk menjalankan

Fitur compiler Prolog online (IDE, editor & interpreter)

Tulis, jalankan, dan uji kode Prolog online secara gratis. Halaman ini berfungsi sebagai IDE, editor kode, compiler, dan interpreter Prolog online sekaligus: ketik kode Anda, tekan Jalankan, dan lihat outputnya seketika. Semuanya berjalan di browser Anda, tanpa perlu menginstal apa pun dan tanpa membuat akun.

  • Jalankan kode seketika: SWI-Prolog 10 (swipl-wasm), dengan output dalam waktu kurang dari satu detik setelah pemuatan pertama.
  • Editor kode: penyorotan sintaks, nomor baris, pencocokan kurung, dan penutupan kurung otomatis.
  • Error yang jelas: pesan error dan peringatan muncul di panel output, seperti di komputer Anda sendiri.
  • Layar penuh: Ctrl/⌘ + Shift + F, ukuran font yang dapat diatur, tata letak berdampingan atau bertumpuk, dan panel yang dapat diubah ukurannya.
  • Simpan otomatis: kode Anda disimpan di browser; download sebagai main.pl atau salin dengan satu klik.
  • Aman untuk bereksperimen: batas waktu dan tombol Hentikan mengakhiri loop tak terbatas.
  • Privat: runtime Prolog berjalan di perangkat Anda, sehingga kode Anda tidak pernah diupload.
  • Mode gelap dan pintasan keyboard: Ctrl/⌘ + Enter menjalankan kode.
  • Gratis: tanpa daftar, tanpa batas penggunaan.

Pelajari bahasa pemrograman lain

Cara menggunakan compiler Prolog online

  1. Tulis fakta dan aturan Anda di editor, atau mulai dari contoh dengan Reset contoh.
  2. Tentukan apa yang dijalankan dengan direktif :- initialization(main)., di mana main adalah predikat yang memanggil goal yang ingin Anda coba dan mencetak hasilnya.
  3. Tekan Jalankan atau gunakan Ctrl + Enter (⌘ + Enter di Mac). Program dimuat sebagai file main.pl, dan direktifnya dijalankan saat pemuatan.
  4. Lihat panel Output untuk teks yang dicetak, error, dan peringatan. Pilih batas waktu 5, 15, atau 60 detik, dan gunakan Hentikan jika rekursi tidak pernah berakhir.

Runtime SWI-Prolog berukuran sekitar 4 MB dan disimpan di cache browser Anda setelah kunjungan pertama. Simpan program Anda dengan Salin atau unduhan main.pl, ubah ukuran teks dengan A− dan A+, ganti tata letak panel dengan tombol tata letak, dan gunakan Layar penuh (Ctrl/⌘ + Shift + F, Esc untuk keluar) untuk program yang lebih panjang.

Semuanya berjalan di browser Anda. Program tidak pernah dikirim ke server, dan editor hanya menyimpan versi terakhir Anda di local storage browser Anda.

Apa saja yang didukung

Halaman ini memakai SWI-Prolog 10 yang dikompilasi ke WebAssembly (swipl-wasm). Ini adalah sistem SWI-Prolog yang sebenarnya, bukan interpreter yang disederhanakan.

  • Consult file: kode Anda dimuat persis seperti yang dilakukan consult('main.pl'), sehingga klausa, operator, dan direktif semuanya berfungsi.
  • Predikat output: format/2, write/1, writeln/1, print/1, dan nl/0 semuanya mencetak ke panel output.
  • Predikat list dan all-solutions: member/2, append/3, length/2, msort/2, findall/3, bagof/3, setof/3, forall/2.
  • Aritmetika dengan is/2 dan operator pembanding, pada bilangan bulat dan float. 20! dalam contoh dihitung secara tepat.
  • Diagnostik seperti yang dicetak SWI-Prolog, misalnya peringatan singleton variable dan error seperti ERROR: ... Arithmetic: `foo/0' is not a function.

Perbedaannya dengan Prolog desktop:

  • Tidak ada prompt kueri ?- interaktif, jadi Anda tidak bisa mengetik kueri lalu menekan ; untuk jawaban berikutnya. Letakkan kueri di main dan cetak jawabannya, atau kumpulkan semuanya dengan findall/3 atau forall/2.
  • Tidak ada standard input. read/1 tidak punya apa pun untuk dibaca, jadi tulis data uji Anda sebagai fakta.

Dasar-dasar Prolog dalam satu program

% Fakta
likes(mary, wine).
likes(john, wine).
likes(john, mary).

% Sebuah aturan: X dan Y berteman jika keduanya menyukai hal yang sama
friends(X, Y) :- likes(X, Z), likes(Y, Z), X \== Y.

% Rekursi pada list, dengan akumulator
sum_list_acc([], Acc, Acc).
sum_list_acc([H|T], Acc0, Sum) :- Acc1 is Acc0 + H, sum_list_acc(T, Acc1, Sum).

% Cut (!) mengunci pada klausa pertama yang cocok
max(X, Y, X) :- X >= Y, !.
max(_, Y, Y).

main :-
    findall(X-Y, friends(X, Y), Pairs), writeln(Pairs),
    sum_list_acc([1,2,3,4], 0, S), format("sum = ~w~n", [S]),
    max(3, 7, M), format("max = ~w~n", [M]).

:- initialization(main).

Menjalankannya mencetak [mary-john,john-mary], sum = 10, dan max = 7.

Jebakan yang umum

  • = adalah unifikasi, bukan assignment atau aritmetika. X = 1 + 2 mengikat X ke term 1+2. Gunakan X is 1 + 2 untuk mengevaluasinya, dan =:= untuk membandingkan dua angka.
  • Variabel diawali huruf kapital atau _. name adalah atom dan Name adalah variabel, sehingga salah ketik dengan huruf kecil diam-diam mengubah makna sebuah klausa.
  • Peringatan singleton berarti sebuah variabel hanya muncul satu kali dalam klausa, yang biasanya merupakan salah ketik. Ganti namanya menjadi _ atau _Name jika memang sengaja tidak dipakai.
  • Gunakan cut dengan hati-hati. max/3 di atas tidak bermasalah untuk max(3, 7, M), tetapi klausa kedua bergantung pada cut, sehingga max(5, 3, 3) keliru berhasil. Menulis max(X, Y, Y) :- X < Y. sebagai klausa kedua membuatnya aman. Cut yang salah tempat juga bisa menyembunyikan solusi yang seharusnya dikembalikan findall.
  • Rekursi kiri membuat loop. Aturan seperti ancestor(X, Y) :- ancestor(X, Z), parent(Z, Y). berulang tanpa henti. Letakkan goal parent lebih dulu.
Tips: Jika main gagal, bukan berhasil, SWI-Prolog mencetak peringatan bahwa goal inisialisasi gagal. Tambahkan panggilan writeln/1 di antara goal untuk melihat sampai mana program berjalan.

Pertanyaan yang sering diajukan

Bagaimana cara menjalankan kueri?

Tulis di dalam sebuah predikat seperti main dan tambahkan :- initialization(main). di akhir file. Anda juga bisa menaruh goal langsung dalam direktif, misalnya :- X is 2^10, writeln(X).

Apakah ini Prolog standar?

Ini adalah SWI-Prolog, yang mengikuti standar ISO dan menambahkan banyak ekstensi. Teks dalam tanda kutip ganda adalah string di SWI-Prolog, yang penting diketahui jika Anda terbiasa dengan maknanya sebagai list kode karakter.

Bisakah saya mendapatkan semua jawaban dari sebuah kueri?

Bisa. Gunakan findall/3 untuk mengumpulkannya ke dalam list, atau forall/2 untuk mencetak masing-masing, seperti pada program contoh.

Apakah ada bahasa logika atau fungsional lainnya?

Coba Interpreter Scheme Online atau Compiler Clojure Online, atau lihat semua compiler online.

Diperbarui

Tersalin ke clipboard