2010-10-16 8 views

Odpowiedz

16

Można użyć rotatef:

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

Oczywiście, lista indeksowanie może być kosztowne (kosztuje O (wielkość listy)), więc jeśli robisz to z jakąś regularnością, wolisz chcą używać tablicy:

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

chciałbym uniknąć indeksowania na liście dwukrotnie za pomocą nthcdr dostać CDR komórki cons zawierającego pierwszy element, który chcesz zamienić, a następnie użyć elt do g i pozostały element z podlisty. Oznacza to, że musisz tylko raz indeksować od początku listy.

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

Przynajmniej z mojej perspektywy jest to wystarczająco uciążliwe, aby usprawiedliwić funkcję.

+6

DAMN! SO musi coś zrobić z podświetlaniem składni. Myślałem, że to źle dla Pythona. – aaronasterling