(LETREC SWAP (SWAP LAMBDA (LST ITEM1 POS1 ITEM2 POS2) (LET (IF (LEQ POS1 POS2) (AUXSWAP LST ITEM1 POS1 ITEM2 (SUB POS2 POS1)) (AUXSWAP LST ITEM2 POS2 ITEM1 (SUB POS1 POS2))) (X PRINTANDRETURN LST) (Y PRINTANDRETURN (CONS (CONS ITEM1 POS1) (CONS (CONS ITEM2 POS2) (QUOTE NIL)))))) (AUXSWAP LAMBDA (LST ITEM1 P1 ITEM2 OFFSET) (PRINTANDRETURN (IF (EQ (QUOTE 1) P1) (CONS ITEM2 (UPDATE (CDR LST) ITEM1 OFFSET)) (CONS (CAR LST) (AUXSWAP (CDR LST) ITEM1 (SUB P1 (QUOTE 1)) ITEM2 OFFSET))))) (UPDATE LAMBDA (LST ITEM POS) (PRINTANDRETURN (IF (EQ POS (QUOTE 1)) (CONS ITEM (CDR LST)) (CONS (CAR LST) (UPDATE (CDR LST) ITEM (SUB POS (QUOTE 1))))))) (PRINTANDRETURN LAMBDA (ITEM) (LET ITEM (X PRINT ITEM))))&