Đầ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)
:
và +
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
+
, -
, :
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.
- 1. Có ý nghĩa gì đối với đoạn mã này không?
- 2. Điều này thực sự có ý nghĩa gì> Codeigniter
- 3. __memcpy_sse2_unaligned - điều này có ý nghĩa gì chi tiết?
- 4. Điều này có ý nghĩa gì trong ngôn ngữ Ruby?
- 5. Điều gì có ý nghĩa đối với một điều gì đó để "sáng tác tốt"?
- 6. Truy vấn này có ý nghĩa gì?
- 7. C - Dòng này có ý nghĩa gì?
- 8. Điều gì -> có nghĩa là trong prolog?
- 9. Điều gì có ý nghĩa với việc tăng trước mảng $ #?
- 10. inline-block có ý nghĩa gì đối với css?
- 11. Dấu gạch dưới này có ý nghĩa gì trong Swift?
- 12. Điều gì: điều này có nghĩa trong Ruby on Rails?
- 13. Ý nghĩa của typedef này là gì?
- 14. Lỗi yêu cầu Python này có ý nghĩa gì?
- 15. Toán tử ~ này có ý nghĩa gì ở đây?
- 16. Cú pháp JavaScript/jQuery này có ý nghĩa gì?
- 17. Cụm từ thông dụng này có ý nghĩa gì?
- 18. Điều đó có ý nghĩa gì đối với một đối tượng có thể chọn lựa (hoặc có thể chọn)?
- 19. Các biểu tượng git này có ý nghĩa gì?
- 20. Dòng này có ý nghĩa gì trong CSS?
- 21. Biểu tượng này có ý nghĩa gì trong PHP <? =
- 22. Mã hiển thị này có ý nghĩa gì?
- 23. Câu lệnh này có ý nghĩa gì trong C#?
- 24. git checkout: đầu ra lạ này có ý nghĩa gì?
- 25. Tiêu đề H264 NAL này có ý nghĩa gì?
- 26. Cú pháp PHP này có ý nghĩa gì?
- 27. Tuyên bố C này có ý nghĩa gì?
- 28. Nhập này chính xác có ý nghĩa gì trong Scala?
- 29. Câu này có ý nghĩa gì trong C: "(void) ptr;"
- 30. Cấu trúc "đủ điều kiện" này có ý nghĩa gì trong java?
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
Vâng, nó chỉ là để làm cho tên biến rõ ràng hơn. –