Prolog có chuyên nghiệp không?


15

Tôi đã học Prolog nhiều năm trước ở trường đại học. Trong suốt cuộc đời chuyên nghiệp của tôi, tôi chưa bao giờ cần sử dụng Prolog. Tôi đã bỏ lỡ một cái gì đó đặc biệt?

Theo tôi nhớ Prolog đòi hỏi tư duy hoàn toàn khác so với các ngôn ngữ lập trình nổi bật.

Prolog có thực sự được sử dụng để thực hiện một cái gì đó chuyên nghiệp hữu ích?


3
Prolog (và poplog) rất tốt cho mã hóa AI. Nếu bạn không làm những việc liên quan đến AI một cách chuyên nghiệp / nghiêm túc, bạn hoàn toàn không thể sử dụng nó. Giống như cách một người không phải kỹ sư có thể không bao giờ sử dụng MATLAB một cách nghiêm túc.
glasnt

1
Câu hỏi hay. Prolog là ngôn ngữ lập trình đầu tiên được dạy về ngôn ngữ học tính toán tại Uni Potsdam, nhưng sau đó chúng tôi không thực sự sử dụng nó nhiều như vậy, ngay cả khi chúng tôi khá giỏi về nó. Thật đáng tiếc. Mỗi lần tôi nhìn thấy một câu hỏi như "Làm cách nào để sử dụng bộ tích lũy" hoặc "Làm thế nào để tôi có được tất cả các câu trả lời có thể có" trên StackOverflow, tôi tự hỏi người dùng chuyên nghiệp thực sự ở đâu - hầu hết mọi thứ có vẻ như bài tập về nhà. Hoặc có thể thành thạo Prolog biến bạn thành một robot không bao giờ có câu hỏi.
Felix Dombek

Tôi đã từng nghe nói về một hệ thống phát hiện lỗi được viết bằng Prolog và được triển khai ở đâu đó tại Áo (Klagenfurt?) Theo những gì được nói với tôi, sản phẩm này khá tốt và được bán cho khách hàng. Nếu bạn cho rằng "chuyên nghiệp hữu ích" này thì câu trả lời là "có".
Giorgio

Câu trả lời:


12

Theo quan điểm của tôi, việc học những điều cơ bản của Prolog rất đáng giá, bất kể bạn có từng sử dụng nó trong thế giới thực hay không. Cũng rất đáng để hiểu những ý tưởng cơ bản làm cơ sở cho sự thống nhất và cách thực hiện (tầm thường và không hiệu quả) có thể được xử lý.

Nếu bạn có một vấn đề sẽ được giải quyết tốt nhất bằng logic khai báo, bạn nên nhận ra lý tưởng đó và biết (nếu bạn có sự lựa chọn) để sử dụng các công cụ phù hợp cho công việc đó.

Tuy nhiên, tôi đồng ý rằng Prolog cần một tư duy rất khác với các ngôn ngữ mệnh lệnh thông thường và cũng là một tư duy rất khác với các ngôn ngữ chức năng. Ngoài một điểm nào đó, nó dường như đòi hỏi rất nhiều kinh nghiệm (giống như với bất cứ điều gì), và thậm chí còn có rất nhiều kiến ​​thức "sách giáo khoa" khiến não tôi chảy ra khỏi tai tôi.

Ấn tượng của tôi là ... có lẽ cả hai chúng ta đều thiếu một điều gì đó đặc biệt ở một mức độ nào đó, nhưng sẽ không thực tế khi dành thời gian để học ngay cả một kiến ​​thức cấp độ hoàn chỉnh trong sách giáo khoa cho Prolog, chứ đừng nói đến việc cố gắng phát triển kinh nghiệm trong thế giới thực , trừ khi bạn đang xem xét một nghề lập trình logic có thể.

Gần đây tôi đã đọc một cuốn sách về AI và các hệ chuyên gia được xuất bản năm 1989 - một phát hiện may mắn trong một cửa hàng sách cũ. Trong phần quan trọng, đó là một hướng dẫn chuyên biệt về Lisp và Prolog. Thật vậy, hầu hết những gì nó trình bày đã không ấn tượng trong một thời gian dài (tìm kiếm, chẩn đoán, v.v.), nhưng nó vẫn rất thú vị và IMO là một điều đáng để đầu tư một chút thời gian.

Nhiều cuốn sách gần đây mô tả cụ thể về Prolog sẽ tốt hơn cho việc học ngôn ngữ, nhưng rủi ro là bộ não của bạn sẽ chảy ra khỏi tai bạn ở đâu đó trong tài liệu từ trung cấp đến nâng cao.


AI / prolog newbie ở đây. Bất kỳ tài nguyên trực tuyến nào bạn muốn giới thiệu?
yati sagade

@yati - Thử amzi.com/AdventureInProlog/advtop.php - Tôi đã từng ran thông qua một hướng dẫn trên trang web Amzi mà dường như OK như xa như tôi nhớ, nhưng đó là một rất lâu rồi. Tất cả những gì tôi đã xem gần đây (có lẽ là 5 năm qua) cho Prolog là cuốn sách AI tôi đã đề cập trong câu trả lời này. Bạn nên tìm kiếm / đặt câu hỏi ở đây thay vì đăng bình luận, đặc biệt là các bình luận được thêm vào câu trả lời được viết bởi một người về cơ bản là một người mới lâu dài. Prolog là thứ tôi hiếm khi nhìn vào và rất ít sâu sắc - nếu không tôi đã ngừng làm người mới từ một thập kỷ trở lên.
Steve314

10

Đây không phải là tôi, nhưng giả sử câu hỏi có thể là "có ai thực hiện điều gì nghiêm trọng với prolog không?" điều này có thể được tính:

http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html

Watson được cung cấp bởi 10 kệ máy chủ IBM Power 750 chạy Linux và sử dụng 15 terabyte RAM, 2.880 lõi xử lý và có khả năng hoạt động ở 80 teraflop. Watson được viết bằng phần lớn Java nhưng cũng có các đoạn mã quan trọng được viết C ++ và Prolog, tất cả các thành phần được triển khai và tích hợp bằng UIMA.


7

Tôi biết các lập trình viên AI sử dụng nó ..... bởi vì tôi đã học một khóa Prolog trong lớp AI của mình nhưng bên cạnh đó tôi không thấy nhiều người khác nói về nó. đây là một câu hỏi tương tự với rất nhiều câu trả lời /programming/130097/real-world-prolog-usage


6

Prolog là tuyệt vời cho một nguyên mẫu nhanh. Ví dụ: trong http://www.cri.ensmp.fr/ classement / doc / A-381.pdf một biến đổi SSA cho GCC được thực hiện đầu tiên trong Prolog, sau đó trong C.

Tôi đang sử dụng Prolog bên trong trình biên dịch để triển khai nhanh chóng và bẩn các hệ thống loại, tối ưu hóa nhất định và kiểm tra ngữ nghĩa và tôi viết lại mã Prolog thành một thứ bắt buộc chỉ khi hiệu suất của nó không được chấp nhận.


2

Bạn đã trả lời khá nhanh, nhưng tôi đã sử dụng Prolog vào giữa những năm 90 để thiết kế máy tính tỷ lệ bảo hiểm sẽ xác định cho chúng tôi một số phân khúc khách hàng nhất định (rủi ro đọc) sẽ phù hợp với mức phí bảo hiểm. Đó là điều mà bạn không nhất thiết phải thấy hàng ngày, nhưng chắc chắn đã ảnh hưởng đến phí bảo hiểm P & C của bạn trong nhiều năm qua.


2

Theo (Câu hỏi thường gặp này) 1 Phần của Watson, cỗ máy IBM chơi Jeopardy, được viết bằng prolog. (xem câu hỏi số 6)


1

Tôi đã sử dụng Prolog một cách chuyên nghiệp trong một số trường hợp (đáng kể) (hệ thống chuyên gia chẩn đoán; chuyển đổi HTML; đặt thành viên). Tôi có một tình cảm sâu sắc với ngôn ngữ vì vậy, vâng, có sự thiên vị ở đây nhưng thật dễ dàng để khách quan về việc khi nào Prolog phù hợp (hơn / cũng như) - bạn thực sự cần phải xử lý các cấu trúc đệ quy ; ví dụ tốt nhất tôi có thể đưa ra là bảng cơ sở dữ liệu quan hệ nhưng có vô số ví dụ khác (có thể dễ dàng hơn để liệt kê các ví dụ ngược lại như đầu vào ngẫu nhiên của người dùng hoặc (hầu hết) các hàm toán học (tuy nhiên, nhiều hàm toán học có cấu trúc đệ quy và do đó là hoàn toàn thích hợp (ví dụ biến đổi Fourier nhanh rời rạc).

Nhưng, tất nhiên, rất ít "hệ thống đầu cuối" chỉ có thể được định nghĩa theo cách xử lý các cấu trúc đệ quy, (ngoại trừ: định lý chứng minh - nhưng đây là một bài tập khá hàn lâm *) vì vậy thật may mắn khi một quá trình prolog có thể được ghép vào một 'quy trình mệnh lệnh chuẩn hơn' bằng cách sử dụng tất cả các loại kỹ thuật khác nhau (hầu như không có vấn đề gì nhưng giao diện dịch vụ web có thể thường phù hợp); để bạn có thể xử lý giao diện người dùng và xử lý sự kiện ngẫu nhiên, v.v. và sau đó bàn giao khi cần thiết (để thực hiện các truy vấn cơ sở dữ liệu phức tạp hoặc bất kỳ số lượng nào bạn có thể muốn thực hiện với các cấu trúc đệ quy của mình). Tôi thấy nó hoạt động rất đẹp - tốt hơn, ví dụ, LINQ.

Vì vậy, hãy nắm bắt các cấu trúc đệ quy của bạn bằng các bit nhạy cảm và viết một số Prolog đáng yêu, sạch sẽ, thanh lịch, có thể bảo trì! :)

PS khi tôi không sử dụng Prolog, tôi quay lại C #

  • Mặc dù, tôi mong mỏi một ngày khi, ít nhất là một số khía cạnh của, các chương trình thương mại được chứng minh là đúng như một thông lệ tiêu chuẩn.

1

Hãy thử viết một bộ giải sudoku bằng ngôn ngữ yêu thích của bạn, sau đó kiểm tra xem nó được thực hiện như thế nào trong Prolog. Nói chung, bất kỳ vấn đề CLP nào cũng phù hợp với ngôn ngữ khai báo như Prolog.

Nó cũng được sử dụng rộng rãi trong xác minh chính thức phần cứng và phần mềm (về mặt học thuật và có thể là chuyên nghiệp nhưng tôi không có bất kỳ tài liệu tham khảo nào cho các công ty).

Cuối cùng, Erlang chịu ảnh hưởng sâu sắc của Prolog, với khả năng chịu lỗi và đồng thời trong tâm trí.


0

Phần mềm đọc và sắp xếp nhiều thư ở Mỹ và một số quốc gia khác được viết bằng Prolog, sử dụng trình biên dịch được tối ưu hóa cao. Cú pháp của địa chỉ thư được viết bằng các ngữ pháp mệnh đề xác định, giúp cho việc bảo trì dễ dàng và đơn giản hóa việc thích ứng người đọc với các quy ước của các quốc gia và người dùng công nghiệp khác nhau. Các dịch vụ bưu chính thường có các bộ quy tắc phức tạp về những thứ như địa chỉ chuyển tiếp, hộp thư bưu điện so với địa chỉ đường phố, v.v., và các quy tắc này cũng được xây dựng trong Prolog để dễ bảo trì.

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.