6

试图在方案/球拍中旋转一个列表。例如: (rotate-left '(abc)) 输出 (bca)

这是ze代码!

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

不幸的是,这只是输出相同的列表!我敢肯定,这应该是一个简单的解决方法,而且我知道我已经接近了……感谢您的帮助!

4

3 回答 3

8

@laser_wizard 给出的答案不起作用......这是一个正确的实现 - 您必须将第一个替换cons为用于在列表末尾append添加第一个元素。

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


(rotate-left '(a b c))
> '(b c a)
于 2012-10-24T14:32:44.757 回答
1

测试用例!测试用例!此处的检查期望将帮助您了解问题,并帮助其他人了解您在寻找什么。

我觉得我变老了。

于 2012-10-24T16:12:57.757 回答
-2

你有车和 cdr 倒退了!干得好 :

(define (rotate-left LIST)
    (if(null? LIST)'()
        (cons(cdr LIST)(cons(car LIST)'())))))
于 2012-10-24T09:07:12.003 回答