Prolog là gì

Prolog là 1 trong những ngôn ngữ lập trình. Tên gọi Prolog được khởi đầu từ cụm từ tiếng Pháp Programmation en logique, tức là “lập trình theo lô gíc”. Mở ra từ năm 1972 (do Alain Colmerauer và Robert Kowalski thiết kế), phương châm của Prolog là giúp người dùng mô tả lại việc trên ngôn ngữ của logic, dựa vào đó, máy tính sẽ tiến hành suy diễn auto dựa vào những cách thức suy diễn có sẵn (hợp nhất, cù lui và tìm kiếm theo chiều sâu) nhằm tìm câu trả lời cho những người dùng.

Bạn đang xem: Prolog là gì

Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ tự tạo và ngôn từ học trong khoa học laptop (đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên và thoải mái vì đây là mục tiêu thiết kế ban sơ của nó). Cú pháp với ngữ nghĩa của Prolog đơn giản và dễ dàng và sáng sủa sủa, nó được người Nhật xem như là một trong những nền tảng nhằm xây dựng laptop thế hệ sản phẩm năm nhưng ở đó, vắt vì yêu cầu mô tả cách xử lý một vấn đề trên thiết bị tính, con người chỉ cần mô tả vấn đề và máy tính sẽ cung ứng họ nốt phần còn lại.


Mục lục


1 Cú pháp

Cú pháp

Một lịch trình Prolog bao gồm các chính sách được biểu diễn dưới dạng mệnh đề Horn. Một mệnh đề Horn bao gồm dạng

Head:-Body.Head là 1 trong những vị trường đoản cú logic, còn body toàn thân có thể là trống rỗng hoặc là một tập các vị từ bỏ logic. Ví như sau:

chẵn(X):- X chia_dư 2 = 0.Phần lớn các bộ dịch của các chương trình Prolog số đông yêu cầu vị từ logic tại vị trí đầu của một mệnh đề Horn là một trong vị từ dương (không tất cả dấu lấp định đi kèm), còn những vị từ trong phần body toàn thân có thể gồm dấu che định đi kèm. Chương trình xúc tích và ngắn gọn mà không có sự xuất hiện của dấu bao phủ định đi kèm gọi là chương trình xúc tích xác định, còn ko thì được điện thoại tư vấn là chương trình lô ghích thường.

Dữ kiện

Dữ khiếu nại là rất nhiều mệnh đề Horn mà lại phần body toàn thân là rỗng. Dạng hình mệnh đề này thường được thực hiện để tế bào tả các dự khiếu nại của bài bác toán, ví như việc khai báo “tôm” là một con mèo:

mèo(tôm).Khoảng biện pháp từ thành phố hà nội vào thành phố hồ chí minh là khoảng tầm 2000Km:

khoảng_cách(Hà_Nội,TP_Hồ_Chí_Minh,2000).

Luật

Phần còn lại của các mệnh đề vào một chương trình Prolog được gọi là luật. Nó thường diễn tả những vạc biểu ngắn gọn xúc tích trong bài xích toán, ví như nếu công tắc đèn bật thì đèn sáng:

đèn_sáng(X):- công_tắc_bật(X).Toán tử “:-” được dịch thô là “nếu”, trong xúc tích thì nó thay mặt cho toán tử suy ra “Dấu phẩy “,” vào mệnh đề bên trên được dịch là toán tử “và”; phát triển thành trong Prolog được quy ước bắt đầu là một vần âm hoa.
Có thể bạn thân mật Enrico Caruso là gì? cụ thể về Enrico Caruso tiên tiến nhất 2021

Ngữ nghĩa

Một chương trình xúc tích và ngắn gọn có ngữ nghĩa của riêng rẽ nó. Ngữ nghĩa ra quyết định những kết luận “đúng” nào hoàn toàn có thể rút ra được xuất phát điểm từ một chương trình Prolog. Lấy ví dụ một chương trình Prolog bao gồm một dữ kiện:

mèo(tôm).Khi đó, ta hoàn toàn có thể rút ra tuyệt nhất một dữ kiện chính xác là “tôm là 1 trong con mèo”. Trong một áp dụng Prolog, bạn có thể hỏi một trong hai câu hỏi sau để sở hữu được trả lời đúng:

?- mèo(tôm).yes.Và

?- mèo(X).X = tôm;no.Trong lấy một ví dụ trên, “no” tức là không còn câu vấn đáp nào nữa. Mọi thắc mắc khác đầy đủ cho trả lời là sai. Điều này có nghĩa là trong một chương trình Prolog, bạn ta thực hiện giả thiết quả đât đóng, đa số thứ chúng ta khai báo là đúng, còn nếu như không thì nó là sai. Vị vậy trong ví dụ trên, khi chúng ta hỏi “mitu gồm phải là một trong con mèo tuyệt không”, bạn sẽ nhận được câu trả lời “no”.

Với một lịch trình Prolog xác định, ngữ nghĩa của chính nó được định nghĩa là một mô hình tối thiểu của nó.

Xem thêm: Mua Nhau Thai Cừu Ở Đâu ? Mua Nhau Thai Cừu Ở Đâu Tại Tp

Với một chương trình Prolog bình thường, có nhiều loại ngữ nghĩa được áp dụng như ngữ nghĩa đầy đủ, ngữ nghĩa buổi tối thiểu, ngữ nghĩa trả chỉnh,…

Đa số các chương trình biên dịch Prolog ít nhiều (SWI-Prolog, GNU-Prolog) áp dụng ngữ nghĩa không thiếu mà kèm theo là thủ tục suy diễn SLDNF.

Ví dụ

Phần này trình bày một vài chương trình ví dụ, nó có thể chạy giỏi trong SWI-PROLOG.

QuickSort

split(H, , , Z):- order(A, H), split(H, X, Y, Z).split(H, , Y, ):- not(order(A, H)), split(H, X, Y, Z).split(_, <>, <>, <>).quicksort(<>, X, X).quicksort(, S, X):- split(H, T, A, B), quicksort(A, S, ), quicksort(B, Y, X).

Tháp Hà Nội

hanoi(N):- move(N, left, centre, right).move(0, _, _, _):-!.move(N, A, B, C):- M is N-1, move(M, A, C, B), inform(A, B), move(M, C, B, A).inform(X, Y):- write(), nl.

Đại số

/* Tính đạo hàm */d(X,X,1):-!. /* d x dx = 1 */d(C,X,0):- atomic(C). /* d c dx = 0 */d(-U,X,-A):- d(U,X,A). /* d -u dx = - d u dx */ d(U+V,X,A+B):- d(U,X,A), d(V,X,B). /* d u+v dx = d u dx + d v dx */d(U-V,X,A-B):- d(U,X,A), d(V,X,B). /* d u-v dx = d u dx - d v dx */d(C*U,X,C*A):- atomic(C), C = X, d(U,X,A),!. /* d c*u dx = c*d u dx */d(U*V,X,B*U+A*V):- d(U,X,A), d(V,X,B). /* d u*v dx = u*d v dx + v*d u dx */ d(U/V,X,A):- d(U*V^(-1),X,A). /* d u/v dx = d (u*v)^-1 dx */d(U^C,X,C*U^(C-1)*W):- atomic(C), C = X, d(U,X,W). /* d u^c dx = c*u^(c-1)*d u dx */d(log(U),X,A*U^(-1)):- d(U,X,A). /* d ln(u) dx = u^-1 * d u dx *//* Tính tích phân */i(0,X,0):-!. /* Int 0 dx = 0 */i(X,X,(X*X)/2):-!. /* Int X dx = (X^2)/2 */i(C,X,C*X):- atomic(C). /* Int c dx = c*x */i(-U,X,-A):- i(U,X,A). /* Int -U dx = - Int U dx */i(U+V,X,A+B):- i(U,X,A), i(V,X,B). /* Int U+V dx = Int U dx + Int V dx */ i(U-V,X,A-B):- i(U,X,A), i(V,X,B). /* Int U-V dx = Int U dx - Int V dx */i(C*U,X,C*A):- atomic(C), C = X, i(U,X,A),!. /* Int cU dx = c (Int U dx) */i(X^C,X,(X^(C+1))/(C+1)):- atomic(C),!. /* Int x^c dx = x^(c+1)/(c+1) */i(U,V,U*V-A):- d(V,U,A),!. /* Int u dv = u*v - Int v du *//* một trong những luật đơn giản */s(+,X,0,X). /* x + 0 = x */s(+,0,X,X). /* 0 + x = x */s(+,X,Y,X+Y). /* x + y = x + y */s(+,X,Y,Z):- integer(X), integer(Y), Z is X+Y. /* x + y = z /* Đơn giản hoá */simp(E,E):- atomic(E),!.simp(E,F):- E =.. , simp(La,X), simp(Ra,Y), s(Op,X,Y,F).

Bảng so sánh

Comparision of Prolog ImplementationsNền tảngTính năngBộ công cụCơ chế PrologTênHĐHGiấy phépĐồ hoạUnicodeĐiều khiểnChạy một mìnhGiao diện cùng với C*Giao diện với Java*Trình biên dịch tương tácGỡ rốiCode ProfilerCú pháp
DOS-PROLOGMS-DOSSharewareTRUETRUETRUETRUETRUEEdinburgh Prolog
Open PrologMac OSFreewareTRUE
Ciao PrologUnix, WindowsGPLTRUETRUETRUETRUETRUEISO-Prolog
GNU PrologUnix, WindowsGPLTRUETRUETRUETRUETRUEISO-Prolog
SWI-PrologUnix, Windows, Mac OS XLGPLTRUETRUETRUETRUETRUETRUETRUETRUEISO-Prolog, Edinburgh Prolog

*Giao diện cùng với C/Java cũng rất có thể được sử dụng cho đồ vật hoạ và những điều khiển.

HiLog và λProlog không ngừng mở rộng Prolog với các tính năng bậc cao.InterProlog, bộ thư viện cho phép kết nối giữa Java và Prolog. Cung cấp XSB, SWI-Prolog với YAP.Prova Prolog gồm tích đúng theo Java cho phép người dùng phối hợp cú pháp và thư viện của Java trong Prolog.

Tham khảo


*