Tampaknya menulis Deklaratif SQL
sangat populer di Pemrograman Imperatif . Namun, sepertinya juga menulis Deklaratif Prolog
bisa menghemat banyak kerumitan tetapi ini tidak terlalu umum.
Apakah ada preseden historis untuk preferensi yang jelas dari SQL lebih dari Prolog?
Jika alasannya adalah kurangnya dukungan asli oleh bahasa Imperatif , maka apakah mungkin untuk menjawab mengapa pembuat bahasa tidak merasa bermanfaat untuk mendukung secara asli Prolog
?
Untuk memberikan beberapa contoh spesifik:
Contoh 1
Mengevaluasi aplikasi pinjaman mungkin hanya beberapa baris kode Prolog
, seperti SELECT/JOIN
kueri yang hanya beberapa baris kode SQL
, tetapi tampaknya keuntungannya tidak sejelas SQL
.
Contoh 2
Berikut adalah contoh masalah lain dan solusinya dalam Prolog. Program logika kendala berikut mewakili dataset yang disederhanakan dari sejarah john sebagai guru:
teaches(john, hardware, T) :- 1990 ≤ T, T < 1999.
teaches(john, software, T) :- 1999 ≤ T, T < 2005.
teaches(john, logic, T) :- 2005 ≤ T, T ≤ 2012.
rank(john, instructor, T) :- 1990 ≤ T, T < 2010.
rank(john, professor, T) :- 2010 ≤ T, T < 2014.
Klausa tujuan berikut ini menanyakan dataset untuk mengetahui kapan john mengajar logika dan juga seorang profesor :
:- teaches(john, logic, T), rank(john, professor, T).
Hasil:
2010 ≤ T, T ≤ 2012.
Dalam contoh di atas akan mudah SQL
untuk mendapatkan hasil yang sama. Tapi anggaplah Anda memiliki data ini dalam Array
. Maka tidak mudah untuk mendapatkan hasil yang sama dengan menggunakan SQL
. Dan dalam hal data disimpan dalam sebuah array, saya percaya bahwa kode Prolog akan lebih mudah untuk ditulis dan dipelihara.
sumber
Jawaban:
Saya percaya ini terutama hal sejarah.
SQL terutama digunakan dalam bisnis untuk membuat aplikasi bisnis. Beberapa perusahaan membangun kehidupan mereka dengan menjual solusi SQL dan mereka menggunakan uang mereka untuk mengiklankan dan mendorong SQL ke dalam pikiran banyak orang. Ini terutama diberdayakan oleh betapa pentingnya data bagi pebisnis. Inilah sebabnya mengapa SQL menang atas banyak pesaing dan sangat dikenal dan digunakan bahkan hari ini.
Prolog di sisi lain sebagian besar dikenal di bidang akademik, biasanya di bidang kecerdasan buatan. Orang akademis jarang mendorong alat dan ide mereka pada orang lain dengan cara bisnis. Biasanya diperlukan beberapa perusahaan untuk mengiklankan teknologi yang lahir di dunia akademis agar dapat menyebar di antara pengembang umum. Selain itu, walaupun data sangat penting, "aturan bisnis" tidak demikian. Meskipun mereka mungkin tampak penting, mereka jauh kurang penting daripada data. Aturan bisnis biasanya dapat diperbaiki dengan mudah. Mencoba memperbaiki data "rusak" biasanya merupakan masalah yang jauh lebih sulit. Jadi bisnis lebih fokus pada mendapatkan solusi data mereka daripada solusi aturan bisnis mereka.
sumber
Alasannya sebenarnya cukup sederhana. Ini tidak ada hubungannya dengan seberapa berguna bahasa untuk tugas yang diberikan dan segala sesuatu yang berkaitan dengan bagaimana kode dipelihara.
Membaca pernyataan SQL, banyak pengembang akan dapat menentukan apa yang dilakukan pertanyaan paling mendasar tanpa mengetahui bahasa. Mereka mungkin memiliki waktu yang lebih sulit dalam kasus contoh kompleks tetapi mengadaptasi kode yang ada atau bekerja dari sampel relatif mudah. Hambatan untuk memahami cukup rendah untuk sebagian besar pertanyaan.
Anda membaca beberapa baris prolog dan banyak pengembang akan sedikit juling dan meninggalkan tugas untuk orang lain, dan mungkin pergi untuk berbaring. Sintaksis predikat prolog tidak cocok untuk dibaca dengan mudah.
Memperbarui:
Berdasarkan sampel kode, bahasa yang mengimplementasikan koleksi harus dilakukan dengan baik. Saya menerapkan solusi dalam C # / Linq dan itu tidak jauh lebih besar daripada sampel prolog (setelah Anda menghitung pengetikan statis dan definisi yang diperlukan). Ada langkah tambahan yang terlibat dalam beberapa pekerjaan sementara untuk menggabungkan daftar untuk membuat satu timeline yang akan dicari tetapi itu bukan jumlah pekerjaan yang signifikan.
sumber
join
atau beberapacount(*)
hal seperti itu. Jika kita memahami dasar-dasar SQL itu karena kita kadang-kadang harus menggunakan bahasa itu dan karena itu harus mempelajari dasar-dasar ini. Penyimpanan data relasional adalah kebutuhan yang jauh lebih umum daripada menyelesaikan sistem logika, sehingga tidak ada kebutuhan yang kuat untuk mempelajari Prolog.^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
.Ada alasan lain. Secara praktis, SQL berguna untuk data yang ada di disk. Jadi basis data digunakan untuk menyimpan data untuk waktu yang "lama" (beberapa bulan). Setiap database SQL (misalnya PostgreSQL, MySQL, Oracle, ....) mengelola data pada disk (atau SSD, yaitu perangkat keras yang dapat menyimpan data jika dimatikan dengan benar). Namun, sebagian besar implementasi Prolog yang saya sadari bekerja di memori, dan tidak dapat digunakan untuk menyimpan data dengan andal (data persisten setelah pemadaman listrik, setidaknya yang diprogram). Dan implementasi SQL dapat menangani data terabyte ....
Tentu saja, DBMS tidak langsung menulis ke disk (tetapi nanti). Tapi interpreter Prolog yang saya dengar tidak pernah menulis (secara implisit) fakta & aturan mereka untuk bertahan di disk.
(Beberapa implementasi bahasa memang memiliki kemampuan kegigihan, misalnya SBCL dengan
save-lisp-and-die
... tapi saya tidak tahu Prolog melakukan itu).Secara pragmatis, SQL adalah untuk basis data - pada disk -, tetapi Prolog adalah bahasa pemrograman (untuk kode sumber dalam file tekstual).
sumber
Satu aspek yang tidak disebutkan sejauh ini adalah dorongan untuk sistem "terbuka" pada 1980-an dan 1990-an. Di banyak tempat, vendor perangkat lunak harus menyediakan akses standar industri ke data dalam database mereka. Pada saat itu, SQL adalah standar yang telah diketahui dan dipahami dengan baik; Prolog cukup esoteris dan akademis. Begitu Anda mulai mendapatkan antarmuka seperti ODBC untuk menghubungkan sistem dengan mudah, tidak ada yang tertarik untuk melihat teknologi lain.
Saya bekerja di suatu tempat di akhir tahun 80-an yang memiliki basis data ISAM yang cukup berhasil yang dipaksa oleh tekanan pasar / peraturan pengadaan untuk menambahkan antarmuka SQL.
sumber