Saya pernah mendengar bahwa pemrograman logika dapat berfungsi sebagai alternatif tujuan umum untuk paradigma pemrograman lain seperti OO atau pemrograman fungsional. (Karena Prolog sudah selesai Turing, pasti begitu!)
Namun, saya mengalami kesulitan melihat bagaimana orang akan mengimplementasikan program interaktif, seperti game konsol yang sederhana dan grafis dalam Prolog atau bahasa yang serupa. Anda memiliki fakta, aturan yang dapat memperoleh lebih banyak fakta, dan kueri yang mengambil fakta. Sangat mudah untuk melihat bagaimana Anda dapat menggunakan elemen-elemen dasar untuk membuat sesuatu seperti pemecah sudoku. Tapi bagaimana dengan Pac-man, atau lebih tepatnya, Pong?
TOLONG DICATAT: Saya tidak mencari detail tingkat rendah, tetapi tinjauan konsep. (Misalnya: dalam istilah tingkat tinggi, bagaimana Anda menangani I / O? Bagaimana Anda menyimpan status permainan? Bagaimana Anda menerapkan sesuatu seperti "loop utama"? Bagaimana Anda mengukur dan merespons berlalunya waktu? )
sumber
Jawaban:
Status pelacakan game tidak berbeda dengan status tracking dalam program Prolog lainnya. Anda mendefinisikan fakta dan kemudian menggunakannya untuk mengambil keputusan. Ini sudah cukup tua, tetapi artikel Menjelajahi Prolog: Petualangan, Objek, Hewan, dan Pajak melakukan pekerjaan yang baik untuk menjelaskan bagaimana ini bisa bekerja dalam permainan. Dirangkum dari artikel:
Di luar itu, Anda memerlukan perpustakaan grafis dan IO. Mungkin ada distribusi Prolog komersial yang menyertakannya. Saya paling akrab dengan Prolog SWI , jadi saya akan menyarankan plOpenGL sebagai titik awal. Tidak hanya memberi Anda akses ke kemampuan rendering OpenGL, ia juga mencakup binding untuk acara mouse dan keyboard. Misalnya, untuk menangani penekanan tombol Escape, Anda menetapkan aturan keyboard seperti:
Lihatlah contoh cahaya bergerak plOpenGL untuk beberapa detail lebih lanjut dan contoh penanganan gerakan mouse.
Jika Anda menggunakan perpustakaan grafik, itu kemungkinan akan menangani loop permainan untuk Anda. Pada dasarnya, Anda membalikkan kontrol ke pustaka dan memberikan aturan untuk dieksekusi saat yang tepat: mengatur, mengecat, acara IO, dll. Jika Anda ingin membatasi FPS atau menjalankan kode secara kondisional berdasarkan waktu, Anda dapat melacak waktu yang telah berlalu menggunakan waktu / tanggal predikat dan membuat keputusan yang sesuai.
Ada banyak rasa Prolog, jadi ini tentu bukan satu-satunya cara untuk membangun gim. Distribusi dan bahasa terkait yang berbeda akan menggunakan perpustakaan / binding yang berbeda yang dapat mendorong pendekatan yang berbeda. Selain itu, programmer polyglot dapat mendorong Anda untuk menggunakan bahasa host / runtime yang lebih "ramah grafis" untuk mengelola render dan IO saat menggunakan Prolog untuk memodelkan perilaku entitas game dan pengambilan keputusan.
sumber
write
) dalam "predikat logis" tampaknya membelokkan konsep agak jauh.Di atas jawaban Corbin : Secara umum keadaan dapat disimpan / diambil dalam Prolog menggunakan predikat menegaskan / menarik kembali. Tetapi ada banyak opsi non-standar seperti menyimpan ke RDF, XML, database relasional, dll. Jika Anda ingin GUI salah satu contohnya adalah XPCE yang ditawarkan oleh SWI-Prolog.
Perhatikan bahwa meskipun menerapkan permainan lengkap dalam Pemrograman Logika adalah latihan yang baik, dalam praktik kinerjanya tidak memadai dan itulah sebabnya vendor seperti SWI-Prolog menawarkan binding ke bahasa tingkat yang lebih rendah (mis. Java, C ++, dll.). Bahkan menerapkan pemecah Sudoku sederhana memerlukan menggunakan perpustakaan CLP .
sumber