Hàm Emacs Lisp sau đây lấy danh sách các danh sách và trả về một danh sách trong đó các mục trong danh sách bên trong đã được nối với một danh sách lớn. Nó là khá thẳng về phía trước và tôi tin rằng một cái gì đó như thế này phải là một phần của thư viện chức năng tiêu chuẩn.Tên của chức năng này trong thư viện Emacs Lisp cài sẵn?
(defun flatten (LIST)
(if LIST
(append (car LIST) (flatten (cdr LIST)))
nil))
Tôi đang tìm một hàm sẽ lấy một danh sách danh sách duy nhất làm đối số và sau đó nối thêm tất cả các danh sách bên trong.
(flatten '((a b) (c d)))
sẽ cho
(a b c d)
Có ai biết chức năng này đã được xây dựng trong, và nếu như vậy, theo đó tên?
Cảm ơn!
Cảm ơn rất nhiều câu trả lời của bạn, các định nghĩa rất thanh lịch. Nhưng dù sao, câu hỏi của tôi không phải là quá nhiều cho một cách để đạt được hành vi này, nhưng liệu ELisp đã cung cấp một chức năng như vậy chưa. Điều này thực sự là nhiều hơn tò mò, không phải vì tôi phải đối mặt với một vấn đề cụ thể mà có vẻ rất phức tạp ... –
Câu trả lời là, "có, nó", cụ thể là mapcan trên chức năng nhận dạng. – jrockway
Tôi không nghĩ như vậy: mapcan có hai đối số (chức năng nhận dạng và danh sách) trong khi nghi ngờ "flatten" chỉ có một danh sách. (Curry ở đâu khi anh cần anh ta?) Dù sao, như tôi đã nói trước đây, nó không thực sự quan trọng, và các giải pháp của vatine ở trên đều tuyệt vời. –