Preseden historis mengapa Prolog kurang populer daripada SQL dalam Pemrograman Imperatif? [Tutup]

12

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/JOINkueri 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 SQLuntuk 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.

53777A
sumber
8
Anda mungkin ingin menekan aspek kata-kata kasar.
4
Sebagian besar teks terdengar seperti kata kasar terhadap orang yang tidak menggunakan Prolog. Ada pertanyaan yang patut ditanyakan yang terkandung di dalamnya, tetapi hal-hal lain (kata-kata kasar) menarik turunnya pendapat dan mematikan orang-orang yang dapat menyumbangkan jawaban. Dengan kata lain, saya sarankan Anda mencoba mengungkapkan pertanyaan Anda dengan cara yang lebih murah hati.
6
"Misalnya mengevaluasi aplikasi pinjaman mungkin hanya beberapa baris kode di Prolog" Saya tidak membeli ini, karena alasan yang sama seperti aplikasi apa pun yang layak, garam akan menggunakan banyak permintaan SQL yang dibuat khusus atau yang dihasilkan.
Euforia
7
Mungkin saya kehilangan sesuatu, tetapi saya pikir jawabannya di sini adalah 'orang menggunakan SQL karena itulah yang didukung database' .
GrandmasterB
3
Mereka memang menggunakan Prolog ... yah ... sebenarnya ... mereka memang menggunakan Rules Engine , yang merupakan "ad hoc, dispesifikasikan secara informal, dipenuhi bug, implementasi lambat setengah dari Prolog" .
Jörg W Mittag

Jawaban:

19

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.

Euforia
sumber
2
"Biasanya diperlukan beberapa perusahaan untuk mengiklankan teknologi yang lahir di dunia akademis agar dapat menyebar di antara pengembang umum.": Benar. Banyak ide bagus dikembangkan di dunia akademis dan kemudian dipopulerkan oleh perusahaan yang memiliki kekuatan pemasaran untuk melakukannya. +1
Giorgio
6

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.

James Snell
sumber
14
Memang benar bahwa SQL menggunakan sintaksis ultra-verbose dan COBOL-grade yang membuatnya "mudah" untuk dibaca. Tapi saya sangat meragukan bahwa seseorang yang tidak tahu SQL akan dapat memahami dengan benar pernyataan rumit-menengah dengan beberapa joinatau beberapa count(*)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.
amon
3
@amon Kedengarannya seperti awal dari jawaban yang bagus :-)
svick
1
Hambatan untuk belajar SQL mungkin diturunkan karena keterbacaannya, prolog mungkin menangkis orang karena sintaksisnya, saya sepenuhnya setuju akan hal itu. Tapi memang, tanpa mengetahui subqueries pemahaman SQL dan beberapa bergabung tidak begitu sepele. Tetapi penghalang yang lebih rendah ketika memulai dengan pertanyaan sederhana jelas merupakan alasan orang akan menggunakan SQL dan bukannya Prolog untuk memulai. :)
Dylan Meeus
4
@ Jamesames Maaf, tapi -1. Apa yang Anda klaim tidak cocok dengan RegEx . ^(?:(?:(?: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})$.
53777A
1
@JamesSnell RegEx adalah cryptic, sulit untuk menulis, men-debug, memelihara dan memodifikasi atau memperluas, tetapi mereka sangat populer. Jika Anda benar maka RegEx seharusnya tidak pernah mendapatkan popularitas mereka saat ini antara pengembang dan pembuat bahasa.
53777A
4

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).

Basile Starynkevitch
sumber
1
Saya tidak berpikir begitu, karena tidak ada database SQL yang bekerja secara ketat dengan disk I / O, karena itu akan sangat tidak efisien (ada beberapa data dalam memori setiap saat), dan tidak ada hambatan teknis untuk membuat serialisasi batasan prolog ke disk yang saya dapat memikirkan saat ini.
idoby
3
Secara teoritis, SQL adalah bahasa query dan tidak peduli tentang bagaimana data disimpan, selama data tersebut dijelaskan oleh model relasional. SQL hanyalah sebuah antarmuka, bukan paradigma. Ada database menggunakan SQL yang beroperasi murni atau sebagian dalam memori non-persisten. Bahkan mungkin untuk menggunakan database SQL untuk menyimpan data dalam bentuk fakta Prolog! [rujukan?] Bagaimanapun, fakta hanya menggambarkan hubungan. Sebaliknya, mesin Prolog mungkin akan menyimpan fakta dalam mode seperti database pada disk daripada memuat semuanya ke memori.
amon
1
Secara teoritis ya, tetapi secara praktis SQL menyimpan pada disk, dan itu seringkali penting
Basile Starynkevitch
1
Aturan & Fakta @BasileStarynkevitch ditulis pada kode sumber yang tetap ada di disk. Mengapa Anda menyimpannya di database? Apa yang Anda maksud dengan Prolog tidak dapat menyimpan data? Seharusnya tidak melakukan itu. Itu sebabnya database memang ada. Bisakah Anda menjelaskan lebih lanjut?
53777A
1
Tepatnya, SQL adalah untuk basis data, dan Prolog adalah bahasa pemrograman. Itu poin saya.
Basile Starynkevitch
1

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.

dave
sumber