2009-10-03 41 views

Trả lời

3

So với chính xác thì sao? Prolog thực sự chỉ là việc thực hiện ưu việt của lập trình logic vì vậy nếu câu hỏi của bạn thực sự là so sánh các mô hình lập trình thì thực sự rất rộng và bạn nên xem here.

Nếu câu hỏi của bạn cụ thể hơn về prolog so với các ngôn ngữ OO thường thấy, tôi cho rằng bạn thực sự so sánh táo với cam - "lợi thế" (như nó) chỉ là một cách suy nghĩ khác thế giới, và đôi khi thay đổi cách bạn đặt một câu hỏi cung cấp một công cụ tốt hơn để giải quyết một vấn đề.

+0

so với C/C++ nói riêng ... giải quyết một vấn đề 8 queens là ví dụ, dễ dàng hơn trong Prolog (mà tôi vừa phát hiện ra). Tại sao C vs Prolog như táo và cam? Không phải mọi chương trình C được chuyển đổi sang Prolog và ngược lại? – Lazer

+2

Nó có thể (theo lý thuyết - tức là tôi không thể nghĩ ra một ví dụ ngược lại) nhưng chỉ vì bạn không thể có nghĩa là bạn nên làm như vậy. Nhìn vào nó theo cách này: nếu nó * là * sự lựa chọn đúng nhất trong thời gian đó thì có rất nhiều lập trình viên prolog hơn là có. – annakata

+0

@annakata vâng, tôi đồng ý. nhưng tôi không biết tại sao (có ít lập trình viên Prolog hơn) – Lazer

3

Về cơ bản, nếu chương trình của bạn có thể được tuyên bố dễ dàng như các câu lệnh logic chính thức khai báo, Prolog (hoặc ngôn ngữ khác trong gia đình đó) sẽ cho thời gian phát triển nhanh nhất. Nếu bạn sử dụng một trình biên dịch Prolog tốt, nó cũng sẽ cung cấp hiệu suất và độ tin cậy tốt nhất, bởi vì động cơ sẽ có rất nhiều nỗ lực thiết kế và phát triển.

Cố gắng triển khai loại nội dung này bằng một ngôn ngữ khác có xu hướng là một mớ hỗn độn. Giải pháp sạch nhất và tổng quát nhất có thể liên quan đến việc triển khai công cụ hợp nhất của riêng bạn. Ngay cả những triển khai ngây thơ không chính xác nhỏ, Máy Tóm tắt Warren có một hoặc hai cuốn sách viết về nó, và làm tốt hơn ít nhất sẽ liên quan đến một chút công bằng về nghiên cứu, đọc một số giấy tờ nhức đầu.

Tất nhiên trong thế giới thực, các phần quan trọng trong chương trình của bạn có thể được hưởng lợi từ Prolog, nhưng nhiều thứ khác được xử lý tốt hơn bằng ngôn ngữ khác. Đó là lý do tại sao rất nhiều trình biên dịch Prolog có thể giao tiếp với, ví dụ: C.

1

Tôi muốn nói prolog hoạt động tốt cho các vấn đề mà cơ sở tri thức tạo thành một phần quan trọng của giải pháp. Đặc biệt khi cấu trúc tri thức phù hợp để được mã hóa thành các quy tắc logic.

Ví dụ: viết trình thông dịch ngôn ngữ tự nhiên cho một miền vấn đề cụ thể sẽ yêu cầu nhiều kiến ​​thức trong miền đó. Các hệ thống chuyên gia cũng nằm trong danh mục điều khiển tri thức này.

Đó là một ngôn ngữ tốt đẹp để khám phá các giải pháp cho các câu đố logic ;-)

+0

vâng, tôi chỉ giải quyết vấn đề tám nữ hoàng với nó, và nó rất dễ dàng ... tôi không biết tại sao chúng tôi không sử dụng Prolog thường xuyên hơn. – Lazer

+3

@eSKay - hai cái lớn, A). sai công cụ cho hội chứng việc làm, bởi vì phần lớn các vấn đề kinh doanh hóa ra là nhiều hơn về thao tác các đối tượng và OO do đó là một mô hình rất phổ biến và thành công B). prolog là vô cùng khó khăn để grok, và một cơn ác mộng không lành mạnh để gỡ lỗi – annakata

2

Một trong những thời gian tốt nhất để sử dụng Prolog là khi bạn có một vấn đề phù hợp với giải quyết với backtracking cũng có. Và đó là khi bạn có nhiều giải pháp có thể cho một vấn đề, và có lẽ bạn muốn yêu cầu chúng bao gồm/loại trừ tùy thuộc vào một số ngữ cảnh. Điều này cho thấy rất nhiều sự mơ hồ ... như trong xử lý ngôn ngữ tự nhiên.

Nó chắc chắn sẽ là rất nhiều tidier để viết tất cả các câu trả lời tiềm năng như Prolog điều khoản. Với một ngôn ngữ bắt buộc, tất cả những gì tôi nghĩ bạn có thể làm là viết một tuyên bố CASE khổng lồ (thực sự khổng lồ), điều này không quá vui.

2

Những thứ đó là vốn có trong Prolog:

  • khớp mẫu!
  • mọi thứ liên quan đến tìm kiếm độ sâu đầu tiên.(Trong Java nếu bạn muốn làm một DFS, bạn có thể muốn thực hiện nó bằng một mẫu người truy cập hoặc làm một (thực sự khổng lồ) TRƯỜNG HỢP
  • thống nhất
  • ??

Paul Graham, là một Lisp tuy nhiên, anh ta lập luận rằng Prolog thực sự tốt cho 2% các vấn đề, bản thân tôi muốn phá vỡ 2% này xuống và tìm ra cách anh ta sẽ đưa ra con số đó. "ít mã hơn, nhiều quyền lực hơn" Prolog chắc chắn là "ít mã" hơn và nếu bạn đi cho hương vị sau của nó (những cái đã gõ), bạn sẽ có thêm sức mạnh. Điều duy nhất làm phiền tôi khi sử dụng Pr olog là một thực tế là tôi không có quyền truy cập ngẫu nhiên trong danh sách (không có mảng).

2

Prolog là một ngôn ngữ lập trình bậc rất cao. Tương tự có thể là (Prolog: C) là (C: Assembler)

Tại sao không được sử dụng nhiều? Tôi nghĩ rằng nó đã làm với các máy chúng tôi sử dụng; Chúng được dựa trên máy turing. C có thể được biên dịch thành mã byte tự động, nhưng Prolog được biên dịch để chạy trên một mô phỏng của Máy Tóm tắt Warren, do đó, nó không phải là hiệu quả.

Ngoài ra, prolog được dựa trên logic đơn hàng đầu tiên không có khả năng giải quyết mọi vấn đề có thể giải quyết theo cách khai báo, do đó, tại một số điểm, bạn cần phải dựa vào mã giống như mệnh lệnh.

+0

Bạn có thể đưa ra một ví dụ của một vấn đề đó là không giải quyết được trong Prolog? – alexraasch

+0

@alexraasch Prolog là turing hoàn chỉnh, do đó, nó có khả năng giải quyết các khả năng giải quyết. Tuy nhiên, nếu bạn cố gắng giải quyết, ví dụ, một hệ phương trình với prolog mã của bạn sẽ là bắt buộc giống như. –

1

Tôi đã lập trình (để giải trí) trong một năm với Swi-Prolog. Tôi nghĩ một trong những ưu điểm của Prolog là Prolog không có tác dụng phụ: Prolog là ngôn ngữ không sử dụng cho biến cục bộ hoặc lớp, nó là loại lực mà lập trình viên không sử dụng biến. Prolog đối tượng không có nhà nước, loại. Tôi nghĩ. Tôi đã viết dòng lệnh Prolog (không có GUI, ngoại trừ vài bài kiểm tra XPCE): nó giống như một chuyến tàu trên đường đua.

Các vấn đề liên quan