tôi có một danh sách mà tôi tạo ra như sau:Làm thế nào để tạo biến toàn cầu trong prolog
tab([(top,left),(top,middle),(top,right),(center,left),(center,middle),
(center,right),(bottom,left),(bottom,middle),(bottom,right)]).
tôi muốn tạo một AllPosition biến toàn cầu đó là một tab. Vì vậy, tôi đã làm như sau:
tab(AllPos).
Điều này có đúng không?
Sau đó, tôi phải theo dõi vấn đề: Tôi có một chức năng nhận được một trong các cặp trong tab. Điều đó tôi muốn loại bỏ. Vì vậy, tôi đã làm điều này:
place(Line, Column, Tab) :-
AllPos \== [_,_] /*while AllPos isn't empty - not sur if this is done this way*/ -> (member((Line,Column), AllPos) -> (erase(AllPos, (Line,Column), AllPos)).
xóa phần tử Element from List và tạo danh sách mới Danh sách mới bằng Danh sách nhưng không có phần tử. Cả hai chức năng member
và erase
đều hoạt động.
Điều này là ... Như bạn có thể đã nhận thấy tôi sử dụng AllPos
ở khắp mọi nơi. Đó là bởi vì tôi muốn, tôi muốn sửa đổi nó để tôi có thể sử dụng nó sau này (sau khi đã gỡ bỏ một số yếu tố từ nó), trong một chức năng khác. Logic của tôi có đúng không? Tôi có thể sử dụng AllPos đã sửa đổi trong một chức năng khác không? Cảm ơn
Cũng vui lòng xem câu hỏi và câu trả lời về cách [** tránh biến toàn cầu **] (http://stackoverflow.com/questions/19005042/how-to-avoid-using-assert-and-retractall-in -prolog-to-implement-global-or-state) trong Prolog. – mat