2011-04-12 57 views
2

需要预先警告:这是一项家庭作业问题。我试图编写一个反转列表的Scheme函数。 '(1 2 3)变成'(3 2 1)等等,我不允许使用这样做的预定义函数。试图在计划中反转列表

我在正确的轨道上与我在这里写的东西?

;myReverse 
(define (myReverse list) 
    (if (null? list) '() 
     (append (myReverse(cdr list)) car list))) 

谢谢!

+0

对不起,我忘了提及的输出。 – Ben 2011-04-12 03:26:46

+0

[Scheme中有什么相反的功能? \ [问:反向嵌套列表]](http://stackoverflow.com/questions/4092113/what-is-the-reverse-function-in-scheme-q-reverse-nested-list) – 2011-04-12 03:26:56

+0

接受的答案在该线程是可怕的(闻起来像O(N^2)),不在Scheme中,绝对不是惯用的。我会在那里的正确答案,以避免损坏本的作业。 – wowest 2011-04-12 03:31:21

回答

1

那么,使用list作为一个名字会很奇怪,因为Scheme是一个Lisp-1。改为拨打lst

想想你可以用foldl,cons,'()lst做什么。

1

我在正确的轨道上与我写在这里?

是的。有些事情要考虑:

  • list是一个内置的函数名,和一个你可能真的想在这个解决方案中使用,所以你可能不应该命名您的正式那个
  • 你忘了周围的括号car list
  • append需要两个列表;你传递一个列表和一些

    > (append '(1) 2) 
    (1 . 2) 
    > (append '(1) '(2)) 
    (1 2)