当前位置:  开发笔记 > 编程语言 > 正文

替换Common Lisp列表中的项目?

如何解决《替换CommonLisp列表中的项目?》经验,为你挑选了3个好方法。

我有一个列表(我称之为L),索引(N)和新事物(NEW).如果我想用N替换L中的L,那么最好的方法是什么?我应该将子列表最多N,从N到列表的末尾,然后使用列表将第一部分,NEW和最后部分的新列表粘合在一起?或者有更好的方法吗?



1> l0st3d..:
(setf (nth N L) NEW)

应该做的伎俩.


是的,除了你不能在常见的lisp中使用t作为变量名,因为它也是真值符号.

2> hazzen..:

你多久会这样做; 如果你真的想要一个数组,你应该使用一个数组.否则,是的,一个函数使得包含前N个元素,新元素和尾部的副本的新列表都可以.我不知道我的头顶内置,但我有一段时间没有用Lisp编程.

这是Scheme中的一个解决方案(因为我知道它比Common Lisp更好,并且有一个解释器来检查我的工作):

(define (replace-nth list n elem)
  (cond
    ((null? list) ())
    ((eq? n 0) (cons elem (cdr list)))
    (#t (cons (car list) (replace-nth (cdr list) (- n 1) elem)))))



3> Dan Weinreb..:
(setf (nth N L) T)

如果您想要做的是"破坏性"修改,即实际更改现有列表,则是最清晰,最简洁,最快捷的方式.它不分配任何新内存.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有