2010-10-17 48 views
5

trong prolog trực quan có phần "tên miền" trong chương trình prolog mà bạn có thể xác định loại. Có bất kỳ điều tương tự trong swi-prolog?Định nghĩa kiểu Prolog trong swi-prolog

Trong prolog hình ảnh một kiểu được định nghĩa như sau:

domains 
NewType = thing1; thing2 

Trả lời

6

số Nhưng có tuyên bố chế độ trong Mercury. Thủy ngân nhiều hơn Prolog; nó là một ngôn ngữ functional-logic. Thủy ngân vẫn có rất nhiều cú pháp Prolog.

SWI-Prolog là Prolog chuẩn. Nó chỉ sử dụng các khai báo chế độ trong tài liệu 1 làm thông tin cho người dùng. Các khai báo như vậy có thể được đặt trong các bình luận của các mô-đun cho các chương trình phân tích cú pháp tài liệu để biên dịch.

Trong Prologs chuẩn, ngoài nhận xét, các khai báo như vậy chỉ được phép (và reqired) trong các tình huống rất đặc biệt. Ví dụ block/1 của Sicstus Prolog chẳng hạn yêu cầu chúng.

Chặn/1 được sử dụng cho đồng định tuyến (đánh giá chậm, trì hoãn, v.v.). Tôi chỉ thấy block được sử dụng trong một chương trình trong cuộc đời tôi, PAKCS 2, một thông dịch viên cho một ngôn ngữ logic chức năng khác. Khi trình thông dịch được chuyển sang SWI, block/1 không được sử dụng.

1Loại và chế độ khai báo Nguồn Tài liệu SWI
2 PAKCS, một chương trình sử dụng block/1 ngữ (PAKCS là một thực hiện các cà ri ngôn ngữ.)

7

Trong khi SWI-Prolog không hỗ trợ các loại trong một công suất khá giống như những gì bạn đang yêu cầu, điều đáng chú ý là nó thực sự hỗ trợ một cơ chế 'kiểu' đơn giản thông qua việc sử dụng đặc tả thuật ngữ thông qua vị từ record/1 trong thư viện record.

Biến vị ngữ này cho phép bạn chỉ định cụm từ phức tạp 'loại' (mẫu) sử dụng ngôn ngữ đặc tả thuật ngữ cụ thể và diễn giải nó để tự động tạo các biến vị ngữ được sử dụng để thực hiện tạo (thông qua một biến vị ngữ hàm dựng), sửa đổi qua 'setter' các biến vị ngữ và các trình truy cập thông qua các biến vị ngữ 'getter' trên các cá thể term, tất cả bằng cách mở rộng thuật ngữ với một quy ước đặt tên vị ngữ cụ thể. Điều này đặc biệt hữu ích khi viết mã Prolog đi qua các cấu trúc thuật ngữ phức tạp hợp lý, vì nó cung cấp cho bạn khả năng kiểm tra kiểu thô sơ mà Prolog thường thiếu (nguyên bản). Tôi đã sử dụng điều này trên nhiều dự án Prolog có quy mô lớn, nơi các giao diện được thiết kế trước khi thực hiện.

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