方案-追加到列表末尾

祖海卜·艾哈迈德(Zuhaib Ahmed)

对于这样一个简单的问题,我感到非常抱歉。这太琐碎了,我一直无法在网上找到与此问题有关的人。因此,我将不胜感激。

我想编写一个非常简单的函数,该函数接受一个列表和一个项目,并将该项目追加到列表的末尾。

我递归编写的函数转到列表的末尾并返回新项。实在令人沮丧,无法正常工作。这是我见过的最简单的功能

(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

奥斯卡·洛佩兹(Oscar Lopez)

您只需要以列表(而不是项目)结束递归代替这个:

(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章