Apakah ada referensi yang jelas, dengan pseudo-code, tentang bagaimana cara mengimplementasikan juru bahasa Prolog dalam bahasa yang murni fungsional? Apa yang saya temukan sejauh ini tampaknya hanya berurusan dengan bahasa imperatif, hanyalah sebuah demonstrasi dari Prolog yang dilaksanakan dengan sendirinya, atau tidak menawarkan algoritma konkret untuk digunakan untuk interpretasi. Saya akan sangat menghargai jawaban.
25
Jawaban:
Sejak Prolog = Sintaksis Unifikasi + chaining Mundur + repl
Ketiga bagian dapat ditemukan dalam kecerdasan buatan: struktur dan strategi untuk pemecahan masalah yang kompleks oleh George F. Luger. Dalam edisi keempat buku ini, ketiga bagian diimplementasikan dalam LISP di Bagian 15.8, Pemrograman Logika dalam LISP. Dia juga memasukkan kode yang sama di buku-bukunya yang lain, tetapi saya tidak memiliki semuanya untuk dicatat di sini. Kode untuk buku-bukunya dapat ditemukan di sini .
Sumber lain dengan ketiga bagian dapat ditemukan dalam Paradigma pemrograman kecerdasan buatan: studi kasus di Common Lisp oleh Peter Norvig. Lihat Bab 11, Pemrograman Logika dan 12, Mengkompilasi Program Logika. Kode untuk bukunya dapat ditemukan di sini .
Sumber lain adalah Struktur dan interpretasi program komputer oleh Hal Abelson, Jerry Sussman dan Julie Sussman. Lihat Bagian 4.4 Pemrograman Logika. Situs untuk buku ada di sini dan kode untuk buku itu ada di sini .
Bukan hal yang aneh untuk menemukan algoritma unifikasi dengan back chaining diimplementasikan di banyak aplikasi jika Anda tahu ke mana harus mencari; ini terutama lazim dalam tipe yang menyimpulkan dalam kompiler fungsional. Menggunakan unifikasi kata kunci atau terjadi membantu untuk menemukan fungsi. Juga sebagian besar implementasi menggunakan unif untuk nama fungsi unifikasi.
Untuk versi Prolog, kurangi REPL, yang dilakukan di OCaml, lihat Kode dan sumber daya untuk "Buku Pegangan Logika Praktis dan Penalaran Otomatis" - prolog.ml
Terjemahan kode buku ke F # dapat ditemukan di sini . Terjemahan kode buku ke Haskell dapat ditemukan di sini .
Dalam hal menemukan kode, algoritma unifikasi paling mudah ditemukan, kemudian implementasi dengan rantai belakang tertanam dalam aplikasi. Menemukan implementasi Prolog yang berfungsi penuh dalam bahasa fungsional dengan REPL adalah yang paling sulit. Sebagian besar waktu kode tidak dalam format untuk penggunaan langsung dalam PROLOG; itu sangat disesuaikan untuk meningkatkan kinerja, sehingga Anda dapat menemukan kode tetapi tidak akan sebanding dengan harga untuk menggoda bagian yang Anda inginkan. Saran saya adalah membaca buku Luger dan membangunnya dari awal dalam bahasa pilihan Anda, bahkan jika itu berarti menginstal dan mempelajari LISP dan menerjemahkannya untuk melakukannya.
EDIT
Karena ini adalah pertanyaan duplikat dari StackOverflow dan OP baru dan di komentar mengatakan:
Saya akan memperluas ini di sini, tetapi menyadari OP harus mengajukan pertanyaan baru.
Untuk beberapa hal intro, lihat menerapkan tipe inferensi .
Buku terbaik yang saya tahu tentang ini adalah Jenis dan bahasa pemrograman oleh Benjamin C. Pierce. Situs buku ada di sini . Sumber daya dengan tautan ke kode OCaml ada di sini . Dan baru-baru ini mulai tetapi sebagian besar terjemahan lengkap untuk F # ada di sini .
Jenis tanggungan: hal. 462 Jenis penyempurnaan: hal. 207 Linear logic and type systems: hal. 109
sumber
Lihat implementasi miniprolog di kebun binatang bahasa Pemrograman saya , ini adalah yang terakhir dalam daftar. Anda dapat melihat kode sumber online , kode ini didokumentasikan dengan baik.
sumber