Shift list elements to left by 3: Difference between revisions

Content added Content deleted
(Added Arturo implementation)
(Added a Scheme implementation.)
Line 1,482: Line 1,482:
After: [4, 5, 6, 7, 8, 9, 1, 2, 3]
After: [4, 5, 6, 7, 8, 9, 1, 2, 3]
</pre>
</pre>
=={{header|Scheme}}==
{{works with|Chez Scheme}}
<lang scheme>; Rotate a list by the given number of elements.
; Positive = Rotate left; Negative = Rotate right.

(define list-rotate
(lambda (lst n)
(cond
((or (not (pair? lst)) (= n 0))
lst)
((< n 0)
(let ((end (1- (length lst))))
(list-rotate (append (list (list-ref lst end)) (list-head lst end)) (1+ n))))
(else
(list-rotate (cdr (append lst (list (car lst)))) (1- n))))))</lang>
{{out}}
<pre>(list-rotate '(1 2 3 4 5 6 7 8 9) 3) --> (4 5 6 7 8 9 1 2 3)
(list-rotate '(1 2 3 4 5 6 7 8 9) -3) --> (7 8 9 1 2 3 4 5 6)</pre>


=={{header|Wren}}==
=={{header|Wren}}==