List 方案旋转函数
我必须编写一个函数,将列表旋转n次。旋转包括将元素从列表的前端放置到末尾。我完全迷路了。任何帮助都将不胜感激 如果这是一门课程,而您的作业要求您手工完成所有内容,则您需要使用或实施自己,包括:获取、删除和附加 take lst n返回lst的前n个元素。例如,“123453”返回1233。 drop lst n返回lst的前n个元素之后的所有内容。例如,drop'123453返回45。 append lst1 lst2返回一个列表,其中包含lst1的所有元素,后跟lst2的所有元素。例如,append'45'1 2 3返回4 5 1 2 3。 一旦手头有了这些函数,实现旋转函数就很简单了:List 方案旋转函数,list,rotation,scheme,List,Rotation,Scheme,我必须编写一个函数,将列表旋转n次。旋转包括将元素从列表的前端放置到末尾。我完全迷路了。任何帮助都将不胜感激 如果这是一门课程,而您的作业要求您手工完成所有内容,则您需要使用或实施自己,包括:获取、删除和附加 take lst n返回lst的前n个元素。例如,“123453”返回1233。 drop lst n返回lst的前n个元素之后的所有内容。例如,drop'123453返回45。 append lst1 lst2返回一个列表,其中包含lst1的所有元素,后跟lst2的所有元素。例如,app
(define (rotate lst n)
(let ((n (modulo n (length lst))))
(append (drop lst n) (take lst n))))
一个基本的实施将是
(define (rotate lst n)
(cond
[(< n 0)
(error "n is negative")]
[(or (= n 0) (null? lst))
lst]
[else
(rotate (append (cdr lst) (list (car lst)))
(- n 1))]))
作为一种改进,您应该考虑到测试
(rotate '(a b c d e) 3)
=> '(d e a b c)
(rotate '(a b c) 5)
=> '(c a b)