该函数有1个参数,一个整数。
例如,rot-left(2 '(1 2 3 4 5))
应该返回(3 4 5 1 2 )
而rot-right(2 '(1 2 3 4 5))
应该返回(5 4 1 2 3)
。
我已经尝试过了......它不起作用,但它应该做的是将列表的最后n个元素添加到空列表中。
(defun rot_left (n l)
(if (zerop n)
'()
(append (last l)
rot-left ((- n 1) (cdr l)))))
答案 0 :(得分:0)
我将给出一个解决方案,假设如果函数rot-right
应该从右向左旋转列表的元素,(rot-right 2 '(1 2 3 4 5))
应该生成(4 5 1 2 3)
而不是(5 4 1 2 3)
然后,假设这种解释是正确的,只能通过Common Lisp中的原始运算符编写函数,而不使用迭代或递归:
(defun rot-left(n l)
(append (nthcdr n l) (butlast l (- (length l) n))))
(defun rot-right(n l)
(rot-left (- (length l) n) l))
(defvar a '(1 2 3 4 5))
(rot-left 2 a) ; produces (3 4 5 1 2)
(rot-right 2 a) ; produces (4 5 1 2 3)