Tôi đang cố gắng thực hiện thao tác cấu trúc dữ liệu lồng nhau có chứa danh sách các phần tử. Sau khi mucking xung quanh với các cách tiếp cận khác nhau cuối cùng tôi đã giải quyết trên ống kính như là cách tốt nhất để đi về việc này. Chúng hoạt động hoàn hảo cho việc tìm kiếm và sửa đổi các phần tử cụ thể của cấu trúc, nhưng cho đến nay tôi đã nói về cách thêm các phần tử mới. Từ những gì tôi đã đọc, tôi không thể sử dụng kỹ thuật Traversal vì nó vi phạm luật Traversal để chèn phần tử mới vào danh sách và giả sử tôi thậm chí có thể tìm ra cách thực hiện điều đó bằng cách sử dụng Traversal in nơi đầu tiên (tôi vẫn còn khá yếu với Haskell, và các chữ ký kiểu cho hầu hết mọi thứ trong gói thấu kính làm cho đầu tôi quay).Chèn vào danh sách tại một vị trí cụ thể bằng cách sử dụng ống kính
Cụ thể những gì tôi đang cố gắng thực hiện là tìm một số phần tử trong danh sách các phần tử khớp với công cụ chọn cụ thể, sau đó chèn phần tử mới trước hoặc sau phần tử được so khớp (đối số khác nhau cho hàm trước hoặc sau trận đấu). Control.Lens đã có một cái gì đó có thể thực hiện những gì tôi đang cố gắng để làm và sự hiểu biết của tôi về các chữ ký loại chỉ là quá yếu để xem nó? Có cách nào tốt hơn để hoàn thành những gì tôi đang cố gắng làm không?
Nó sẽ khá tầm thường nếu tôi chỉ cố thêm một phần tử mới vào đầu hoặc cuối danh sách, nhưng chèn nó ở đâu đó cụ thể ở giữa là phần khó. Trong một số mã trước ống kính tôi viết, tôi đã sử dụng một lần để hoàn thành những gì tôi muốn, nhưng nó bắt đầu nhận được gnarly trên các phần lồng nhau sâu hơn của cấu trúc (EG gấp trong một lần trong một lần) Tôi quay sang Control.Lens để cố gắng gỡ rối một số mớ hỗn độn đó.
Bạn có cân nhắc điều gì đó giống như một người theo thuyết ziplist thay vì danh sách bình thường không? Điều đó sẽ giúp bạn dễ dàng chèn phần tử vào trước hoặc sau phần tử lấy nét của bạn. – kqr
Tôi đã xem xét nó, nhưng cách cấu trúc dữ liệu ban đầu được xây dựng sẽ khó chuyển đổi thành ziplist vì vậy tôi có thể phải chuyển đổi nó sau khi thực tế có nghĩa là một hệ thống phân cấp kiểu hoàn toàn riêng biệt chỉ để chứa các ziplists. Đó là một trong hai điều đó hoặc tôi chuyển đổi từ danh sách thành ziplist và quay lại mỗi khi tôi cần chèn, mà tôi có thể làm, nhưng dường như không tốt hơn là chỉ cần gấp trên toàn bộ danh sách ngay từ đầu. – Orclev