Tại sao (không) lập trình logic?


13

Tôi chưa nghe về bất kỳ việc sử dụng ngôn ngữ lập trình logic nào (như Prolog) trong ngành công nghiệp phần mềm, tôi cũng không biết sử dụng nó trong lập trình sở thích hoặc các dự án nguồn mở. Nó (Prolog) được sử dụng như một ngôn ngữ học thuật ở một mức độ nào đó, mặc dù (tại sao nó được sử dụng trong học viện?).

Điều này khiến tôi tự hỏi, tại sao bạn nên sử dụng lập trình logic, và tại sao không? Tại sao nó không nhận được bất kỳ sử dụng ngành công nghiệp phát hiện?

Câu trả lời:


8

Bên ngoài giới hàn lâm ... Tôi đã nghe nói về nó được sử dụng nhiều hơn trong AI, đôi khi trong các trò chơi (tôi nghe nói nó đã điều khiển AI trong loạt phim Đen & Trắng). Tôi cũng đã nghe nói về các biến thể được sử dụng để chạy các công cụ quy tắc cho các doanh nghiệp và mô phỏng kinh tế nhất định.

Dự đoán của tôi về việc thiếu áp dụng rộng rãi là:

  • Thật kỳ lạ - hầu hết mọi người không quen lập trình trong đó và họ có thể làm những gì họ cần bằng các ngôn ngữ khác.
  • Thiếu sự hỗ trợ của nhà cung cấp - Nếu Microsoft đột nhiên bắt đầu đẩy Prolog # (với toàn bộ trọng lượng của thư viện .NET và bộ công cụ và hỗ trợ chính thức đằng sau nó) như The Next Big Thing - và sau đó IBM và Oracle đã đưa ra một cái gì đó để cạnh tranh với tôi Tôi sẽ thấy nó nhặt!
  • Thiếu tích hợp - Tôi không biết thư viện nào có sẵn cho Prolog - lần trước tôi đã kiểm tra không có nhiều thư viện mạng hoặc đồ họa, nghĩa là "ứng dụng" Prolog phải được bọc trong một ứng dụng khác tương tác với phần còn lại của thế giới.

"một ứng dụng" Prolog "phải được gói trong một ứng dụng khác tương tác với phần còn lại của thế giới." Đó thực sự là một tính năng cho chúng tôi. Chúng ta có thể dễ dàng cô lập các bit prolog hơn vì giao diện của nó rất đơn giản.
S.Lott 17/03/2016

@ S.Lott: Ok, tôi có thể thấy điều đó cũng có thể tích cực, mặc dù khi tôi ở trường và muốn thực sự làm một ứng dụng với Prolog, tôi thấy hệ thống ống nước và hệ thống dây điện giữa các mảnh là một thách thức và trở ngại lớn.
Thất

5

Chúng tôi đã sử dụng nó để xây dựng trình phân tích cú pháp. Nó dễ làm việc hơn lex / yacc.

Tại sao nó không nhận được bất kỳ sử dụng ngành công nghiệp phát hiện?

Điều này là không thể trả lời. "Phát hiện" có nghĩa là gì? Ai cần lấy bản ghi nhớ phát hiện?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

Hỏi Meridian Software về việc cung cấp prolog của họ nếu bạn muốn sự thật.

Tuy nhiên, có một số rào cản gia nhập mà tôi đã trải qua.

Đầu tiên, prolog có thể chậm. Khi có rất nhiều quy tắc ứng cử viên và không có thao tác cắt đơn giản nào để hạn chế không gian tìm kiếm, có thể mất một lúc để hoàn thành công việc.

Thứ hai, prolog không phải là thủ tục hoặc chức năng, vì vậy nhiều lập trình viên chùn bước khi sử dụng nó. (Thật thú vị, một số lập trình viên cũng chần chừ trong việc sử dụng SQL. Đối với vấn đề đó, một số lập trình viên sẽ miễn cưỡng sử dụng SQL và làm những việc lạ như tránh tham gia các hoạt động hoặc cho rằng điều đó COUNT(*)không hiệu quả.)

Thứ ba, prolog đòi hỏi một số suy nghĩ khá rõ ràng về các trường hợp khác nhau là gì. Lập trình thủ tục có thể cẩu thả và vẫn hoạt động đáng tin cậy. Báo cáo không thực thi được chấp nhận.

Dưới đây là chấp nhận được trong hầu hết các vòng tròn.

b = a + 1
if a > b: # always False

Kiểu suy nghĩ u ám này khiến bạn gặp rắc rối trong prolog.


2

Một vấn đề là Prolog không thực sự lập trình theo logic vị ngữ bậc nhất, có thể tính toán được (tôi không nhớ ở mức độ nào, nhưng nó không ở NP và nếu bạn thêm số học vào đó thì chính thức là không thể giải quyết được). Do đó, nó là một sự đơn giản hóa.

Trong logic, một mệnh đề có thể được chứng minh là đúng, được chứng minh là sai hoặc không được chứng minh theo một trong hai cách. Prolog chỉ được chứng minh và không được chứng minh, "không được chứng minh" thường có nghĩa là sai. Hơn nữa, thứ tự của các mệnh đề Prolog có thể ảnh hưởng đến việc thực thi, đây không phải là trường hợp của các mệnh đề logic. Trong khóa học tôi đã sử dụng nó, tôi bắt đầu nghĩ về Prolog như một ngôn ngữ phù hợp với mô hình hơn là một ngôn ngữ logic.

Do đó, lập trình Prolog không phụ thuộc quá nhiều vào tính chính xác logic như chính ngôn ngữ Prolog. Đây là một ngôn ngữ hữu ích theo một số cách, nhưng nó không ở đâu gần với ngôn ngữ chính và nó không có công cụ và lợi ích cộng đồng của một ngôn ngữ như C ++.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.