Scheme 在方案中旋转列表

Scheme 在方案中旋转列表,scheme,Scheme,(旋转’(a b c d e))应返回((a b c d e)(b c d e a)(c d e a b c)(e a b c d)) 在这里,我已经在shceme中实现了逻辑,但我面临的问题是,有人能帮我解决这个问题吗 这是我的密码 (define (rotate lst) (define (iter l cycles result) (cond ((= cycles 0) (cons lst result)) ((< cycles 0) resul

(旋转’(a b c d e))应返回((a b c d e)(b c d e a)(c d e a b c)(e a b c d))

在这里,我已经在shceme中实现了逻辑,但我面临的问题是,有人能帮我解决这个问题吗

这是我的密码

(define (rotate lst)
  (define (iter l cycles result)
    (cond 
      ((= cycles 0) (cons lst result))
      ((< cycles 0) result)
      (else         (let ((cycled (cycle l)))
                      (iter cycled (- cycles 1) (append result (list cycled)))))))
  (iter lst (- (length lst) 1) ()))


(rotate '(a b c d e))
(定义(旋转lst)
(定义(iter l循环结果)
(续)
((=循环0)(cons lst结果))
((<0个周期)结果)
(否则(让((循环(循环l)))
(国际热核实验堆循环(-cycles 1)(追加结果(列表循环щщщщ)))
(国际热核实验堆lst(-(长度lst)1)())
(旋转(a b c d e))
你没走那么远:

(define (rotate lst)
  (define (iter lst cycles res)
    (cond
      ((= cycles 0) (reverse res))
      (else         (iter (append (cdr lst) (list (car lst))) 
                          (- cycles 1) 
                          (cons lst res)))))
  (iter lst (length lst) null))
  • 无需区分周期=0、周期>0和周期<0;一个基本情况和一个递归情况就足够了
  • 什么是
    (循环l)
    ?它是在其他地方定义的吗

那么您当前的代码是做什么的?怎么了?它输出什么?(定义(旋转lst)(定义(iter lst循环res)(如果(=循环0)(反向res)(iter附加(cdr lst)(列表(汽车lst)))(-循环1)(cons lst res)))(iter lst(长度lst)()这给出了我的设计output@user3071665除了您需要
(定义null'())
在@uselpa的版本中,您的评论有一个裸露的
()
需要引用。你用
if
替换了
cond
,但它们完全相同。事实上,在大多数实现中,
cond
是语法规则,最后变成
if
,就像
或者@user3071665一样,我也会使用
if
,但我尽量接近OP的cod这样他就可以很容易地发现差异。只是不能让我自己调用列表
l
;-)