2012-10-31 69 views
7

Tôi đang cố gắng thêm một mục vào cuối danh sách ở dạng prolog, nhưng nó vẫn không hoạt động.Cách thêm vào cuối danh sách trong prolog

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).  

letters([a,b,c]). 

Tôi không hiểu tại sao điều này bên dưới không hoạt động.

insertAtEnd(d,letters(Stored),letters(Stored)). 

Tôi cũng đang cố gắng lưu trữ danh sách này trong biến Được lưu trữ trong suốt, nhưng tôi không chắc liệu đây có phải là cách chính xác không.

+0

Sự cần thiết phải chèn phần tử vào cuối danh sách đề xuất bạn nên xem xét * danh sách khác biệt *, sẽ cung cấp cho bạn O (1) chèn. –

Trả lời

3

Prolog triển khai quan hệ mô hình tính toán và các biến chỉ có thể được khởi tạo, không được chỉ định. Hãy thử

?- letters(Stored), 
    insertAtEnd(d, Stored, Updated), 
    write(Updated). 
+0

Vì vậy, danh sách gốc không thể chỉnh sửa được? Cho phép nói rằng tôi nhận được một thư điện tử khác, tôi sẽ cần phải gọi insertAtEnd (e, Cập nhật, Cập nhậtAgain)? Tôi đang cố gắng sử dụng một vị từ để cập nhật danh sách mà không cần bàn điều khiển. – MeowMeow

+1

Vâng, đó là một cách khác thường để thực hiện tính toán. Nó liên quan chặt chẽ đến lập trình khai báo. Prolog tìm các quy tắc áp dụng ràng buộc biến, khi nó cần phải tìm lựa chọn thay thế nó bắt đầu hoàn tác ràng buộc được thiết lập trước đó. – CapelliC

1

bạn có thể sử dụng append và đặt hàng của bạn như danh sách thứ hai

như thế này:

insertAtEnd (X, Y, Z): - append (Y, [X], Z).

+0

Mặc dù đây có thể là gợi ý có giá trị để giải quyết vấn đề, một câu trả lời thực sự cần chi tiết hơn một chút so với điều này. Vui lòng [chỉnh sửa] để giải thích cách điều này sẽ giải quyết được vấn đề. Hoặc, thay vào đó, hãy xem xét viết bài này làm nhận xét. –

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