2016-12-04 23 views
5

Đầu tiên khi tôi đọc các vị từ khác nhau trên Prolog, ví dụ: http_server, nó được viết như sau: http_server(:Goal, +Options):+ có nghĩa là gì? Đôi khi ? cũng được viết.
Thứ hai, đôi khi tôi thấy các biến được khai báo với dấu gạch dưới trước chúng như _Request, mặc dù không có bất kỳ biến nào khác Request, tại sao vậy?Điều này có ý nghĩa gì đối với prolog?

Trả lời

7

+, -, : v.v ... sigils được gọi là khai báo chế độ. Chúng mô tả sự khởi tạo dự kiến ​​của các đối số vị ngữ, tức là, cho dù bạn được dự kiến ​​sẽ gọi biến vị ngữ với một biến không liên kết, một thuật ngữ được diễn đạt, vv Những điều này không được chuẩn hóa hoàn toàn; đây là một mô tả về các công ước cho SWI-Prolog: http://www.swi-prolog.org/pldoc/man?section=modes

Như một xấp xỉ đầu tiên, một cuộc tranh luận + là một đầu vào đến vị, bạn có nghĩa vụ phải cung cấp một hạn mặt đất. Đối số - là một đầu ra của biến vị ngữ, vị từ sẽ cố gắng hợp nhất nó bằng một cụm từ. Thời hạn ? có thể được khởi tạo một phần trong cuộc gọi và vị từ có thể nhanh hơn nó. Đối số : là một đối số meta, nghĩa là, đó là mục tiêu được gọi bởi vị từ (ví dụ như trong ví dụ setof/3).

Trong ví dụ về http_server(:Goal, +Options), bạn phải gọi vị từ này với đối số đầu tiên được liên kết với mục tiêu, có thể là tên vị ngữ. Đối số thứ hai phải được khởi tạo, có lẽ là một danh sách có định dạng được mô tả thêm trong tài liệu. Nếu bạn làm không phải hãy gọi biến vị ngữ này như thế này, ví dụ: nếu bạn chuyển một biến không liên kết làm đối số thứ hai, bạn có thể nhận được hành vi không mong muốn hoặc lỗi instantiation.

Đối với câu hỏi thứ hai của bạn (tốt hơn nên tách biệt), biến bắt đầu bằng dấu gạch dưới được gọi là biến ẩn danh. Mỗi biến như vậy chỉ có thể xảy ra một lần cho mỗi mệnh đề, ngoại trừ _, có thể xảy ra vài lần và đề cập đến các biến riêng biệt tại mỗi lần xuất hiện.

Các hệ thống Prolog thường phát ra cảnh báo "biến singleton" cho các biến không ẩn danh chỉ xảy ra một lần, vì các biến này có thể là lỗi chính tả hoặc ký hiệu lập trình quên thứ gì đó. Bạn sử dụng các biến ẩn danh để diễn tả khái niệm rằng "phải có một cái gì đó ở đây (ví dụ, một đối số vị ngữ), nhưng tôi không quan tâm nó là gì". Trong ví dụ của bạn, có lẽ bạn gọi một vị từ có đối số "yêu cầu", nhưng trong trường hợp sử dụng cụ thể của bạn, bạn không quan tâm đến yêu cầu.

+0

Cảm ơn, lời giải thích rất hay. Tuy nhiên có một điều tôi không hiểu, tại sao gọi nó là '_Request' và không chỉ' _'? Có phải chỉ vì sự rõ ràng rằng đó là một yêu cầu? – Ferus

+1

Vâng, nó chỉ là để làm cho tên biến rõ ràng hơn. –

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