函数有一个参数,一个整数。
例如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)))))
最佳答案
我将给出一个解决方案,假设函数rot-right
应该从右向左旋转列表元素,(rot-right 2 '(1 2 3 4 5))
应该产生(4 5 1 2 3)
而不是(5 4 1 2 3)
。
然后,假设这种解释是正确的,函数只能通过公共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)
关于list - 递归函数可在Lisp中左右旋转列表的n个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36162556/