Vì vậy, chúng ta có thể dễ dàng tìm và thay thế một nguyên tử với một nguyên tử trong Prolog bằng cách làm một cái gì đó như:không tầm thường Prolog tìm và thay thế
replace([],A,B,[]).
replace([H|T],A,B,[B|Result]) :-
H=A,
replace(T,A,B,Result),!.
replace([H|T],A,B,[H|Result]) :-
replace(T,A,B,Result).
Tôi chắc rằng có nhiều cách khác để làm điều này quá.
Tuy nhiên, tôi muốn làm điều gì đó phức tạp hơn trong logic trong tính toán. Làm thế nào bạn sẽ làm một cái gì đó như thay thế các liên từ như conj(x,y)
trong một tuyên bố hợp lý chỉ với (x, y)? Vì vậy, nó giống như cuối cùng và thay thế nhưng không phải với các nguyên tử. Vì vậy, chúng tôi có thể có một cái gì đó như reduce(conj(conj(x,y),z)).
mà tôi muốn giảm xuống ((x,y),z)
.
Đây là ví dụ đơn giản chỉ với các liên từ nhưng đây là những gì tôi muốn xảy ra trong trường hợp liên kết. Nếu ai đó quan tâm, đây là tất cả về logic mô tả và phương pháp hoạt cảnh.
Những gì tôi đang bối rối về nó như thế nào bạn đi về làm một tìm và thay thế khi đầu vào không thực sự là một danh sách; đó là một cấu trúc. Tôi không thấy làm thế nào bạn có thể giải quyết điều này mà không cần sử dụng thủ thuật tiêu chuẩn [H|T]
với đệ quy và danh sách. Có ai có ý tưởng nào?
Rất cám ơn.
Tại sao không đặt vết cắt sau lần đầu tiên H = A thay vì sau khi thay thế/4? Mã của bạn sẽ chạy nhanh hơn vì hệ thống Prolog có thể phát hiện ra rằng thay thế/4 là xác định. –