函数有一个参数,一个整数。
例如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/

10-12 05:48