2013-10-09 13 views

Trả lời

7

Các toán tử tiền tố này, trong ngữ cảnh này, đại diện cho các chế độ instantiation, tức là chúng cho bạn biết đối số nào sẽ là biến hoặc được khởi tạo khi gọi vị từ. Họ cũng cho bạn biết nếu một đối số sẽ được (có thể tiếp tục) được khởi tạo bởi cuộc gọi. Chúng cũng có thể được sử dụng để cho bạn biết rằng một đối số sẽ được meta-interpreted theo một cách nào đó bởi vị từ bạn đang gọi. Một số các chế độ instantiation là tiêu chuẩn, khác phụ thuộc vào hệ thống. Trường hợp phổ biến nhất là:

- - lập luận nên không ràng buộc (lập luận khả năng đầu ra)

+ - lập luận nên bị trói buộc (tham số đầu vào)

? - đối số có thể là ràng buộc hay không ràng buộc

@ - đối số sẽ không được khởi tạo hơn nữa bằng cách gọi

: - đối số w bệnh được meta-giải thích theo một cách nào đó (thường mơ hồ)

0 - đối số sẽ được hiểu là mục tiêu và gọi như vậy

N - trong đó N là số tự nhiên; đối số sẽ được hiểu là đóng cửa sẽ được tạo thành với các đối số bổ sung để tạo mục tiêu sẽ được gọi là

Các hệ thống khác nhau cung cấp các chế độ instantiation khác hoặc khác nhau. Ví dụ, để nói rằng một đối số nên được đặt nền tảng khi gọi một vị từ, hoặc để nói rằng một đối số nên là một chỉ báo vị ngữ hoặc nó sẽ được hiểu là một quy tắc ngữ pháp. Bạn sẽ cần phải tham khảo tài liệu của hệ thống Prolog bạn đang sử dụng để biết chi tiết.

+0

Là "toán tử tiền tố" ngôn ngữ của tài liệu? Tôi nghĩ rằng đây có thể là một câu trả lời có giá trị cho người dùng mới làm quen và muốn làm cho tiêu đề trở nên thân thiện hơn với Goolge, nếu có thể. –

+1

Trong một số hệ thống Prolog và cũng trong Logtalk, các ký tự chế độ instantiation thực sự được khai báo là toán tử tiền tố để bạn có thể viết ví dụ: ': - mode (length (? list,? integer), zero_or_more) .' Nhưng những ký tự này cũng có thể chỉ được sử dụng trong tài liệu chứ không phải trong mã mà bạn có thể biên dịch. Vì vậy, một tiêu đề thân thiện hơn có thể là một cái gì đó giống như "Prolog instantiation mode characters" hoặc "Prolog instantiation mode indicators". –

6

Khai báo chế độ xuất hiện lần đầu trong trình biên dịch DECsystem-10 vào cuối những năm 1970. Hướng dẫn sử dụng của DECsystem-10 năm 1978-09 là một trong những mô tả đầu tiên. Động lực được đưa ra 1982-11-10:

Thông tin này cho phép trình biên dịch tạo mã nhỏ gọn hơn tận dụng tốt hơn bộ nhớ thời gian chạy. Việc tiết kiệm thời gian chạy lưu trữ đặc biệt thường có thể rất đáng kể. Chế độ tuyên bố cũng giúp người khác hiểu cách hoạt động của chương trình của bạn.

DECsystem-10

+ — đối số sẽ luôn luôn là một tổ chức phi biến

- — đối số sẽ luôn luôn là một biến

? — không hạn chế

Note những tuyên bố này áp dụng cho mỗi mục tiêu. Đáng chú ý nhất, họ áp dụng cho các mục tiêu đệ quy. Theo cách này, khai báo chế độ sau cộng với định nghĩa của nó ngụ ý rằng đối số thứ hai không phải là một danh sách một phần. Do đó, mục tiêu member(A, [c|_]) sẽ không phù hợp. Vì vậy, giao diện và việc thực hiện phần nào phụ thuộc lẫn nhau có thể dẫn đến các trường hợp khá phức tạp, khi các thống nhất được thực hiện bởi chính vị từ đó phải được tính đến.

:- mode member(?, +). 
member(X, [X|_]). % member(X, [X,.._]) in DEC10 
member(X, [_|L]) :- 
    member(X, L). 

Trong trường hợp tuyên bố chế độ bị vi phạm bởi mục tiêu cụ thể, tuyên bố bị bỏ qua hoặc sẽ xuất hiện lỗi vào thời điểm đó có nghĩa là viết ra thông báo lỗi và lỗi. Trình thông dịch DECsystem-10 luôn bỏ qua các khai báo.

Sâu trong thập niên 1970, hướng dẫn sử dụng ngày 10 tháng 12 do đó đưa ra hai cách giải thích cho khai báo chế độ: Đầu tiên là quy tắc tạo lỗi trong trường hợp người gọi không gặp. Điều thứ hai là hoàn toàn không chính thức, bỏ qua các khai báo chế độ trong thời gian chạy. Cái cũ được sử dụng trong tiêu chuẩn Prolog, cái sau được tìm thấy trong tài liệu của một số hệ thống Prolog.

ISO/IEC-Prolog: Mẫu và phương thức phân lớp

Tiêu chuẩn Prolog (ISO/IEC 13.211-1: 1995, 2007, 2012) sử dụng định dạng sau đây để định nghĩa của các vị từ built-in. Nó bắt đầu bằng subclause .1 Mô tả, .2 Khuôn mẫu và các chế độ, .3 Lỗi, và tùy chọn tiếp tục với .4 Ví dụ, .5 (Các) biến vị ngữ dựng sẵn được khởi động.

8.1.2 Template và chế độ

Một đặc điểm kỹ thuật cho cả hai loại đối số và đó
trong số họ sẽ được khởi tạo cho các built-in vị để
được thỏa mãn. Các trường hợp tạo thành một tập hợp loại trừ lẫn nhau.

...

Các chế độ bê tông là:

+ — đối số được khởi tạo.

@ — như + và đối số sẽ không bị thay đổi gì.

- — đối số sẽ là biến sẽ được khởi tạo iff mục tiêu thành công.

? — yêu cầu không có chế độ, đối số có thể là biến hoặc được khởi tạo.

Nếu một biến vị ngữ được gọi với một chế độ khác, instantiation_error hoặc uninstantiation_error được tạo. Nếu loại không khớp, thì type_error được tạo. Theo cách này, người lập trình có thể dự đoán nhiều lỗi chỉ đơn giản bằng cách xem phần Tiêu bản và chế độ mà không đọc các điều kiện lỗi chi tiết.

Các hệ thống khác

Hệ thống khác với ISO cũng khác nhau trong cách diễn giải chính xác của chúng. Nhiều người thực hiện thất bại thầm lặng trong trường hợp khi lỗi loại sẽ phù hợp. Họ xem các khai báo chế độ như một phương tiện để chỉ ra các trường hợp mà vị từ được dự kiến ​​sẽ làm việc với nghĩa không xác định khác. Thông thường, - được diễn giải gần như sau. Vì không có tham chiếu thực tế xác định ý nghĩa, đây là những gì tôi thu thập một cách không chính thức:

- — đối số là "đối số đầu ra". Có nghĩa là nó sẽ được thống nhất với thuật ngữ kết quả sau mục tiêu đã được thực thi. Vì vậy, đối số là kiên định. Thông thường, không có lỗi nào được liên kết với đối số như vậy.