【发布时间】:2016-12-05 22:39:18
【问题描述】:
我想制作一个正方形列表。我可以用以下代码做到这一点:
(define (makelistsq n)
(define outlist '())
(for ((i n))
(set! outlist (append outlist (list (* i i))))
)
outlist
)
(makelistsq 5)
输出:
'(0 1 4 9 16)
但是,我发现经常使用 cons 和 car 关键字来创建和添加到列表中。与上述附加相比,该方法有什么优势吗?所以,是跟上面更好还是一样:
(define (makelistsq2 n)
(define outlist '())
(for ((i n))
(set! outlist (cons (* i i) outlist))
)
(reverse outlist)
)
感谢您的回答/cmets。
编辑:在此页面Cons element to list vs cons list to element in Scheme 上提到所有使用 append 都是错误的:
对于需要在最后添加一个元素的极少数情况 (相信我,这样做通常意味着您正在考虑 算法错误)你可以使用追加
【问题讨论】:
-
我看到您正在努力掌握 Scheme 的窍门。请拿起一本书(SICP, How to Design Programs, The Little Schemer)阅读,阅读,直到你掌握了在 Scheme 中编写代码的方法。到目前为止,您正在尝试像使用命令式编程语言一样编写程序,而这绝对不是学习 Lisp 时要走的路。