对于这样一个简单的问题,我感到非常抱歉。这太琐碎了,我一直无法在网上找到与此问题有关的人。因此,我将不胜感激。
我想编写一个非常简单的函数,该函数接受一个列表和一个项目,并将该项目追加到列表的末尾。
我递归编写的函数转到列表的末尾并返回新项。实在令人沮丧,无法正常工作。这是我见过的最简单的功能
(define (my-append lst item)
(if (null? lst)
item
(cons (car lst) (my-append (cdr lst) item))))
(display (my-append (list 1 2 3 4) 5))
显示
(1 2 3 4 . 5)
我不知道为什么那个点在那里,而且非常令人沮丧。我以前在任何SO问题中都没有遇到过。
我只想看看
(1 2 3 4 5)
我真的很感谢您的帮助,因为对此我感到非常沮丧。如果有帮助,我正在使用在线编译器运行此代码https://repl.it/languages/scheme
您只需要以列表(而不是项目)结束递归。代替这个:
(if (null? lst)
item
做这个:
(if (null? lst)
(list item)
为了澄清-Scheme中的列表必须以空列表结尾'()
。如果您的递归以某个项目结束,那么最终您将得到以下内容:
(cons 4 5)
=> '(4 . 5)
那是一cons
对。正确的列表以空列表结尾:
(cons 4 (cons 5 '()))
=> '(4 5)
与以下内容相同:
(cons 4 (list 5))
=> '(4 5)
顺便说一句,这是在项目末尾附加项目的惯用方式:
(define (my-append lst item)
(append lst (list item)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句