2010-10-05 36 views
10

Có cách nào để xác định loại phần tử trong danh sách trong Prolog không? Tôi biết rằng các biến không được nhập một cách rõ ràng trong Prolog, nhưng tôi cần phải kiểm tra xem một phần tử là một số, một ký tự cụ thể, vv Làm thế nào điều này có thể được thực hiện?Kiểm tra loại Prolog

+0

Đối với các loại phức tạp hơn so với nguyên thủy, bạn có thể xem cơ chế xử lý hồ sơ SWI_PROLOG (http://tinyurl.com/2gy53rr). Điều này sẽ cho phép bạn thể hiện các loại hợp chất với các trường accessor được đặt tên và sẽ tự động tạo tất cả các biến vị ngữ kiểm tra kiểu cho bạn, với một đặc tả bản ghi. Rất hữu dụng! – sharky

Trả lời

11

Prolog định nghĩa một nhóm các vị từ built-in cho mục đích thử nghiệm loại: var/1, atom/1, integer/1, float/1, atomic/1, compound/1, nonvar/1, number/1, tất cả chúng với một ý nghĩa tự giải thích nếu bạn biết các kiểu dữ liệu của ngôn ngữ. Đối với các ký tự cụ thể, bạn có thể khai thác sự hợp nhất với ký tự đó, sau khi kiểm tra xem phần tử đó không phải là biến tự do hay không (nếu không thống nhất luôn thành công).

4

Bạn có thể thử mã này:

isList([_|_]). 
isList([]). 

Hy vọng nó giúp.

+4

Không trả lời câu hỏi. – Junuxx

+1

... và 'isList ([a | b])' thành công, nhưng không phải là danh sách. – false

+3

Tôi biết nó không liên quan gì đến câu hỏi này, nhưng ý của anh ấy là «isList ([_ | Tail]: - isList (đuôi) .' thay vì dòng đầu tiên – Yolgie

0

để kiểm tra danh sách bạn có thể thử:

listing(is_list/1, list_functor/1). 

is_list(X) :- 
    functor(X, F, _), 
    list_functor(F). 

list_functor('.'). 
list_functor('[]'). 
2

Để kiểm tra xem một biến được ràng buộc vào một danh sách, bạn có thể sử dụng is_list/1.

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