Giả sử tôi có
(setq a 1 b 2)
Làm thế nào tôi có thể trao đổi một cách tao nhã các giá trị của a
và b
không sử dụng một biến tạm thời?
Trong khi tôi nhớ hoạt động hoán đổi từ các ví dụ lập trình từ nhiều năm trước, tôi không nghĩ rằng mình đã từng cần một hoạt động "hoán đổi" như vậy. Vì vậy, nơi bạn tìm thấy bạn cần một điều như vậy?
—
Stefan
@Stefan lần này, tôi đang viết một hàm có hai đối số và tôi muốn đảm bảo rằng đối số đầu tiên là đối số nhỏ hơn trong hai đối số.
—
PythonNut
@PythonNut, bạn cũng có thể liên kết đối số đầu tiên
—
Mark Karpov
(min a b)
và thứ hai với (max a b)
. Đây là một giải pháp. Một số người sẽ cho rằng điều này đòi hỏi hai so sánh khi một người đủ, điều đó đúng. Bạn có thể xử lý nó với một so sánh theo cách thức chức năng hơn, ví dụ như sử dụng liên kết phá hủy (cl-destructuring-bind (a . b) (if (< a b) (cons a b) (cons b a)) ...)
. Đây là một cách khác.
@Mark đúng, nhưng, ít nhất với tôi, cảm giác như đang bay ruồi bằng lựu đạn.
—
PythonNut
cl-destructuring-bind
là một công cụ vô cùng mạnh mẽ cho công việc này.