Tôi mới dùng Common Lisp và lập trình hàm, nhưng tôi có nhiều kinh nghiệm về ngôn ngữ như C, C++, C#, Java và vân vân. Tôi gặp sự cố khi tìm danh sách lồng nhau nhất bên trong danh sách. đầu vào của tôi là một cái gì đó như thế này:Tìm danh sách lồng nhau nhất bên trong danh sách trong Common Lisp
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Tôi muốn có được danh sách lồng nhau nhất trong danh sách này mà trong trường hợp này là
(7)
tôi đã có một ý tưởng mà tôi có thể san bằng danh sách bằng cách nào đó , cho đến khi chỉ còn lại một danh sách phụ. Để minh họa cho những gì tôi muốn nói, đây là một vài bước sau:
Bước 1. - đầu vào:
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
Bước 2. - flatten vào "mức độ đầu tiên":
(0 1 2 3 4 5 (6 (7) 8) 9)
Bước 3. - flatten trên "cấp thứ hai":
(0 1 2 3 4 5 6 (7) 8 9)
Bây giờ chỉ còn lại một danh sách lồng nhau, có nghĩa là danh sách lồng nhau nhất. Nhưng tôi thấy một vấn đề ở đây, khi hai hoặc nhiều danh sách như vậy sẽ xảy ra. Hãy chia sẻ suy nghĩ của bạn về điều này.
Tôi đang gặp sự cố khi đưa quy trình này vào thực tế trong Common Lisp, vì vậy tôi sẽ biết ơn đối với một số gợi ý đúng hướng, có thể một số mã mẫu và v.v. Đây là một bài tập về nhà, vì vậy tôi không thực sự mong đợi một giải pháp đầy đủ, nhưng sẽ rất vui nếu ai đó chỉ ra một giải pháp dễ dàng hơn và tốt hơn và thực hiện nó.
Loại một vấn đề thú vị.Tôi nghĩ rằng những gì tôi sẽ làm sẽ là một DFS traversal, và ghi lại các cặp (lá, chiều sâu lá) trong một danh sách, sau đó tìm kiếm các ngăn xếp cho lá với độ sâu tối đa. –