Tôi tự hỏi nếu có một cách mà tôi có thể buộc getf để so sánh bằng cách sử dụng bằng nhau thay vì eq? Tôi đang sử dụng ccl thực hiện chung lisp.Có thể sử dụng getf để so sánh thay vì eq không? (phổ biến lisp)
Trả lời
No. Bạn phải sử dụng một chức năng khác; một cái gì đó xấp xỉ như thế này có thể làm những gì bạn cần:
(defun equal-getf (plist indicator)
(second (member indicator plist :test #'equal)))
Sửa
Dưới đây là một phiên bản cố định mà đối xử với danh sách đúng như cặp khóa/giá trị:
(defun equal-getf (plist indicator)
(loop for key in plist by #'cddr
for value in (rest plist) by #'cddr
when (equal key indicator)
return value))
tôi không biết nếu có cách để "ghi đè" mặc định, hãy xem bạn có thể tìm thấy một impl sử dụng (describe 'getf)
hoặc (symbol-plist 'getf)
hay không. Một thực hiện semplified thể có thể là
(defun mgetf (l v) (if (< (length l) 2) NIL (if (equal (car l) v) (car (cdr l)) (mgetf (nthcdr 2 l) v))))
EDITED: sử dụng nthcdr thay vì cdr đôi.
impl rất ngây thơ so với các giải pháp khác ... một chút gỉ với lisp (mà hiện tại tôi chỉ sử dụng cho emacs ..., khi cần thiết) ... – ShinTakezou
Điều này sẽ thực hiện công việc. Nó không phải là đệ quy độc đáo, nhưng sử dụng một ứng dụng LOOP thẳng về phía trước. Để cho phép nó ti sử dụng một vị từ tương đương tùy ý, tuyến đường để sử dụng một đối số tùy chọn nên thẳng về phía trước.
(defun mgetf (place indicator)
(loop for (key value . rest) on place by #'cddr
if (equal key indicator)
do (return value)))
- 1. 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?
- 2. Perl so sánh đơn giản == vs eq
- 3. Cách Lisp phổ biến để đổi tên không gian tên
- 4. Phổ biến nhất Lisp IDE
- 5. Tôi có nên chọn == hoặc eq để so sánh chuỗi trong EL không?
- 6. Lập trình ứng dụng và các loại lisp phổ biến
- 7. CAML Truy vấn So sánh ngày giờ với Eq
- 8. So sánh hai quang phổ trong iOS
- 9. phổ biến lisp - có được đường dẫn đến tập tin
- 10. Sử dụng 'DbContext' thay vì 'ObjectContext' có tốt hơn không?
- 11. Sử dụng loại tĩnh thay vì biến
- 12. cách thành ngữ để thay thế (null x) chức năng từ lisp phổ biến trong clojure
- 13. Phương pháp phổ biến để so sánh hai đối tượng Java
- 14. Tôi có thể sử dụng SafeHandle thay vì IntPtr không?
- 15. Thuật toán phổ biến
- 16. SQL phổ biến để so sánh ngày tháng trong SQL Server và ORACLE
- 17. So sánh các biến mảng trong PowerShell
- 18. Các vấn đề với ltk (lisp phổ biến)
- 19. So sánh datetimes bằng không so sánh
- 20. Làm thế nào để tôi sử dụng tốt nhất phổ biến-lisp trong elisp (nếu ở tất cả)?
- 21. Tìm tính năng của tính năng trong lisp phổ biến
- 22. So sánh biến Ngày giờ có thể thay đổi được với giá trị mặc định
- 23. Thành ngữ lisp phổ biến - có cách nào tốt hơn không?
- 24. So sánh số có nhanh hơn so sánh chuỗi không?
- 25. Sử dụng cassandra thay vì memcache?
- 26. chuỗi So sánh sử dụng '==' và 'là'
- 27. Sử dụng jQuery trên biến thay vì DOM?
- 28. Hai chuỗi so sánh bằng cách sử dụng '=' nhưng không thành công trong 'thích' so sánh
- 29. Sử dụng cụm từ thông dụng để so sánh số
- 30. So sánh chuỗi == chỉ hoạt động vì chuỗi không thay đổi?
Tuy nhiên, giải pháp tốt nhất có "lỗi": không coi danh sách là "giá trị khóa", để (bằng-getf '(abcd)' b) trả về C trong khi (getf '(abcd)' b) trả về NIL. Chỉ cần nhận thức được điều này – ShinTakezou