bạn có thể 'gọi' bindings thay thế trên Y
theo cách này:
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
Note ngoặc được yêu cầu để giữ cho dòng điều khiển thực hiện đúng. ;
/2 là toán tử chung or
. Để sử dụng hạn chế của bạn, bạn có thể cũng lựa chọn các thành ngữ hơn
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
rằng trên tùy ý liên kết với Y để mỗi viên của danh sách.
chỉnh sửa Tôi hiểu với sự chậm trễ yêu cầu cuối cùng của bạn. Nếu bạn muốn điều đó Y trận đấu tất cả 3 giá trị hoặc là không phù hợp, sử dụng thay vì
...registered(X, ct101), registered(X, ct102), registered(X, ct103).
hoặc nhỏ gọn hơn
...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).
findall/3 xây dựng danh sách theo thứ tự rất tương tự mà đăng ký/2 thành công. Sau đó, tôi sử dụng sắp xếp để đảm bảo khớp.
...setof(Y, registered(X, Y), [ct101,ct102,ct103]).
setof/3 cũng sắp xếp các danh sách kết quả
Cảm ơn, điều này đã giúp một tấn. Tôi đã không chắc chắn làm thế nào để đi về nó, nhưng tôi sẽ đọc lên trên bindings và backtracking. Đánh giá cao! – Eogcloud