2010-10-16 44 views

Trả lời

16

Bạn có thể sử dụng rotatef:

(rotatef (nth i lst) (nth j lst)) 

Tất nhiên, danh sách chỉ mục có thể tốn kém (chi phí O (kích thước danh sách)), vì vậy nếu bạn làm điều này với bất kỳ đều đặn, bạn thà muốn sử dụng một mảng:

(rotatef (aref arr i) (aref arr j)) 
4

tôi sẽ tránh lập chỉ mục vào danh sách hai lần bằng cách sử dụng nthcdr để có được những cdr của tế bào khuyết điểm có chứa các yếu tố đầu tiên mà bạn muốn trao đổi và sau đó sử dụng elt để g và phần tử còn lại ra khỏi danh sách con. Điều này có nghĩa là bạn chỉ phải thực sự lập chỉ mục bắt đầu từ đầu danh sách một lần.

(let ((list-tail (nthcdr i list))) 
    (rotatef (car list-tail) 
      (elt list-tail (- j i))) 
    list) 

Ít nhất theo quan điểm của tôi, điều này đủ tẻ nhạt để biện minh cho một hàm.

+6

DAMN! SO cần phải làm một cái gì đó về cú pháp tô sáng. Tôi nghĩ rằng nó là xấu cho python. – aaronasterling

Các vấn đề liên quan