JAN*_*JAN 1 scheme functional-programming list append r5rs
我想编写自己的追加,用于将元素追加到现有列表中.
我写了以下内容:
(define (appendElem llist elem)
(if (null? llist)
elem
(cons (car llist) (appendElem (cdr llist) elem))))
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时:
(appendElem (list 1 2 30) 11)
Run Code Online (Sandbox Code Playgroud)
我明白了:
(1 2 30 . 11)
Run Code Online (Sandbox Code Playgroud)
所以问题是,为什么(1 2 30 . 11)不(1 2 30 11)呢?
谢谢
编辑:
修正:
(define (appendElem llist elem)
(if (null? llist)
(list elem)
(cons (car llist) (appendElem (cdr llist) elem))))
Run Code Online (Sandbox Code Playgroud)
想想你想要的基本情况.你想要的只是elem,或者你想要一个单项的列表elem?它们是有区别的.如果想要后者,则需要在代码中修复基本情况.
换句话说,你想(appendElem '() 42)回来42,还是(42)?仔细考虑这个问题的答案,然后考虑每个选择的结果是什么.
顺便说一下,虽然你可以appendElem作为玩具实现,但你很快就会意识到该函数具有O(n)运行时.所以不要使用这种方法构建列表!构建列表的标准方法是将cons项目添加到项目,然后reverse是最终结果列表.