blob: d258c61b0ec92730cd41ea32ccd97341b67f0481 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
(defun left-rotate (lst n)
(loop for e in lst
for i from 0
if (< i n) collect e into backs
else collect e into fronts
finally (return (concatenate 'list fronts backs))))
(defun map-left-rotate (lst n-list)
(map 'list (lambda (n) (funcall #'left-rotate lst n)) n-list))
(defun get-command-line ()
(or
#+CLISP *args*
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))
(defparameter *cmdline* (get-command-line))
(defun print-usage ()
(format t "Usage: sbcl --script ch-1.lsp <integer> ... / <unsigned integer> ..."
(first *cmdline*)))
(when (< (length *cmdline*) 5) (print-usage) (quit))
(defparameter *sep* nil)
(defparameter *a-array* '())
(defparameter *b-array* '())
;; ref: http://clhs.lisp.se/Body/05_abc.htm
(setf (values *a-array* *b-array*)
(loop for arg in (rest *cmdline*)
for n = (parse-integer arg :junk-allowed t)
if (null n) do (when (null *sep*) (setq *sep* arg))
else if (null *sep*) collect arg into a-array
else collect n into b-array
finally (return (values a-array b-array))))
(format t "@A = ~a~%" *a-array*)
(format t "@B = ~a~%" *b-array*)
(loop for rotated in (map-left-rotate *a-array* *b-array*)
do (format t "~a~%" rotated))
|