List 在Scheme/Racket中向左旋转列表

List 在Scheme/Racket中向左旋转列表,list,scheme,racket,List,Scheme,Racket,尝试在scheme/racket中向左旋转列表。 例如:(向左旋转(abc))输出(bca) 这是代码 (define (rotate-left LIST) (if(null? LIST)'() (cons(car LIST)(cons(cdr LIST)'()))))) 不幸的是,这只是输出相同的列表!这应该是一个简单的解决办法,我相信,我知道我很接近…感谢任何帮助 你的车和cdr都倒了!给你: (define (rotate-left LIST) (if(n

尝试在scheme/racket中向左旋转列表。 例如:(向左旋转(abc))输出(bca)

这是代码

(define (rotate-left LIST)
    (if(null? LIST)'()
        (cons(car LIST)(cons(cdr LIST)'())))))

不幸的是,这只是输出相同的列表!这应该是一个简单的解决办法,我相信,我知道我很接近…感谢任何帮助

你的车和cdr都倒了!给你:

(define (rotate-left LIST)
    (if(null? LIST)'()
        (cons(cdr LIST)(cons(car LIST)'())))))

@laser\u向导给出的答案无效。。。这是一个正确的实现-您必须将第一个
cons
替换为
append
,以便在列表末尾添加第一个元素

(define (rotate-left LIST)
  (if (null? LIST)
      '()
      (append (cdr LIST)
              (cons (car LIST)
                    '()))))


(rotate-left '(a b c))
> '(b c a)

测试用例!测试用例!此处的检查expect将帮助您了解问题,并帮助其他人了解您正在寻找的内容


我想我老了

我想你也需要展平结果列表-
(定义(向左旋转列表)(展平(cons(cdr列表)(汽车列表)))
@DonJohnson你真的测试过这个答案吗?因为它不起作用,你知道。。。即使在解决了编译问题之后,
(向左旋转(abc))
仍返回
((bc)a)
。请看一下我的答案,找到一个可行的解决方案。@Ankur是个不错的选择,尽管它假设函数规范要求输入列表始终是平面的。如果允许嵌套输入列表,则应改为使用append。输入列表永远不会嵌套吗?如果可以嵌套,是希望嵌套完全保留在输出中,还是输出为平面?如果输入可以嵌套,那么应该旋转第一个s表达式还是旋转第一个原子?必须很好地说明问题,特别是可以对输入和输出要求做出的假设。这里使用列表表示有什么原因吗?这类问题似乎非常适合于循环数据结构,因此只需遍历该结构就意味着旋转。请提供更多信息!在什么情况下需要此操作?