Cụ thể, tôi chỉ muốn đảm bảo rằng hai danh sách có cùng các yếu tố, bỏ qua thứ tựCó chức năng LISP phổ biến nào để so sánh nội dung của hai danh sách không?
Trả lời
Theo Steele "sự khác biệt thiết lập trả về danh sách các phần tử của danh sách1 không xuất hiện trong danh sách2. Thao tác này không phá hoại."
Vì vậy, nếu thiết khác biệt là trống rỗng và độ dài đều giống nhau ...
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node152.html#SECTION001950000000000000000
Nếu đơn đặt hàng không quan trọng, bạn có thể sử dụng như nhau. Ví dụ:
(equal (list 1 2) (list 1 2))
là đúng. Vì vậy, một cách để làm điều đó sẽ là (sắp xếp) danh sách và sau đó sử dụng bình đẳng. Lưu ý rằng sắp xếp là phá hoại vì vậy nếu thứ tự quan trọng, bạn có thể muốn sao chép nó trước.
Việc đặt hàng có quan trọng hay không - SORT có thể hủy (không sắp xếp tại chỗ!) Danh sách gốc, vì vậy sao chép một ý tưởng hay trong cả hai trường hợp. –
Nếu thứ tự quan trọng, việc sắp xếp (và do đó bản sao) sẽ không cần thiết; (bằng X Y) sẽ là đủ. Tôi nghĩ đó là vấn đề. – Kevin
Nếu các mục lặp lại không quan trọng, hãy xem SET-EXCLUSIVE-OR.
(defun same-bag-p (bag1 bag2 &key (test #'eql))
(let ((table (make-hash-table :test test)))
(loop for key in bag1 do (incf (gethash key table 0)))
(loop for key in bag2 do (decf (gethash key table 0)))
(loop for val being each hash-value of table always (= val 0))))
+1 để xử lý các bản sao. –
Sắp xếp cả hai danh sách, sau đó so sánh:
(equal (sort l1 #'<) (sort l2 #'<))
Không thực sự thích hợp nhưng hãy cẩn thận rằng sắp xếp sẽ phá hủy danh sách ban đầu, vì vậy mã này trông có vẻ xấu như trong hầu hết các trường hợp, bạn nên tạo bản sao trước với ví dụ: '(sắp xếp (bản sao danh sách l1) # '<)' hoặc bạn nên lưu trữ kết quả sắp xếp lại thành l1 và l2. Ngoài ra cách tiếp cận này đòi hỏi các yếu tố có thể sắp xếp (bảng băm không). – 6502
Cảm ơn người đứng đầu. Tôi đã ở vùng đất chức năng thuần khiết khi tôi viết điều này. –
Nếu đơn đặt hàng không quan trọng bạn có thể sử dụng "bộ bằng nhau":
(tương đương-bộ (1 2)
(1 2)) -> T
(tương đương-bộ (1 2)
(2 1)) -> T
(tương đương-bộ (1 2 5)
(1 2)) -> NIL
(bộ ngang (1 2)
(1 5 2)) -> NIL
Tôi không thể tìm thấy chức năng này trong thông số kỹ thuật. Bạn có thể liên kết với nó không? – tsikov
- 1. Có thể sử dụng getf để so sánh thay vì eq không? (phổ biến lisp)
- 2. Tìm tính năng của tính năng trong lisp phổ biến
- 3. Làm cách nào để có danh sách các chức năng không tương tác của Emacs lisp?
- 4. C#: So sánh nội dung của hai IEnumerables
- 5. So sánh nội dung của hai tệp trong Dreamweaver
- 6. Cách tốt nhất để so sánh nội dung của hai đối tượng giống như danh sách là gì?
- 7. so sánh nội dung ByteBuffer?
- 8. cách thành ngữ để thay thế (null x) chức năng từ lisp phổ biến trong clojure
- 9. chức năng lisp để nối một danh sách các chuỗi
- 10. So sánh hai quang phổ trong iOS
- 11. So sánh hai (có khả năng) biến undef trong perl
- 12. Làm cách nào để đọc nội dung của một tệp trong danh sách trong Lisp?
- 13. Làm cách nào để so sánh nội dung của hai dll?
- 14. So sánh Danh sách <String[]>
- 15. Các yếu tố phổ biến so sánh giữa 2 danh sách
- 16. So sánh danh sách từ điển
- 17. So sánh nội dung StringBuffer với bằng
- 18. Danh sách so sánh Python
- 19. So sánh hai danh sách chung chung lớn
- 20. Tìm các phần tử không phổ biến trong danh sách
- 21. Phổ biến nhất Lisp IDE
- 22. So sánh hai Danh sách cho các khác biệt
- 23. Lập trình ứng dụng và các loại lisp phổ biến
- 24. So sánh chức năng so sánh hai tập tin văn bản trong Unix
- 25. (ColdFusion) So sánh hai ngày, sử dụng kết quả để xác định nội dung hiển thị
- 26. So sánh hai Danh sách <int>
- 27. kiểu chức năng để nhân hai danh sách với Scala
- 28. Phương pháp phổ biến để so sánh hai đối tượng Java
- 29. Cách tìm các phần tử phổ biến trong danh sách các danh sách?
- 30. so sánh danh sách Scala với danh sách Java
để bạn có thể nói rằng '(1 2 2) có cùng các yếu tố như' (1 1 2)? – 6502
Phụ thuộc vào ý bạn của 'cùng một yếu tố'. Tôi thấy quan điểm của bạn, mặc dù: nếu tôi trả lời 'có', thì chiều dài không quan trọng. Nếu tôi trả lời 'không', sự khác biệt thiết lập không giải quyết được vấn đề. – philosodad