สมมติว่าฉันมี
(setq a 1 b 2)
ฉันจะสลับค่าของa
และb
โดยไม่ใช้ตัวแปรชั่วคราวได้อย่างไร
ในขณะที่ฉันจำการดำเนินการสลับจากตัวอย่างการเขียนโปรแกรมเมื่อหลายปีก่อนฉันไม่คิดว่าฉันต้องการการดำเนินการ "สลับ" เช่นนี้มาก่อน ดังนั้นคุณจะพบสิ่งที่คุณต้องการสิ่งที่?
—
สเตฟาน
@ สเตฟานในเวลานี้ฉันกำลังเขียนฟังก์ชั่นที่ใช้สองข้อโต้แย้งและฉันต้องการให้แน่ใจว่าอาร์กิวเมนต์แรกมีขนาดเล็กกว่าของทั้งสอง
—
PythonNut
@PythonNut ที่ดีที่คุณสามารถผูกอาร์กิวเมนต์แรกและครั้งที่สองไป
—
Mark Karpov
(min a b)
(max a b)
นี่คือทางออกหนึ่ง บางคนอาจแย้งว่านี่ต้องใช้การเปรียบเทียบสองแบบเมื่อมีพอเพียง (cl-destructuring-bind (a . b) (if (< a b) (cons a b) (cons b a)) ...)
คุณสามารถจัดการกับมันด้วยการเปรียบเทียบในลักษณะการทำงานมากขึ้นยังคงเป็นเช่นใช้ผูก destructuring นี่เป็นอีกวิธีหนึ่ง
@ Mark จริง แต่อย่างน้อยสำหรับฉันที่รู้สึกเหมือนแมลงวันตบกับระเบิดมือ
—
PythonNut
cl-destructuring-bind
เป็นเครื่องมือที่ทรงพลังสำหรับงานนี้