gpt4 book ai didi

common-lisp - Lisp-遍历列表并替换值

转载 作者:行者123 更新时间:2023-12-04 22:49:29 27 4
gpt4 key购买 nike

在这个问题中,我有三个(结构相同的)列表。两个是所有数字,另一个是 nil .我正在尝试通过添加两个列表中的相应值来替换空列表中的相应值。到目前为止,我使用的是循环并使用 setf来替换值。

(defun add-two-lists (list1 list2 list3)
(loop for a in list1
for b in list2
for c in list3 do
(setf c (+ a b))))

问题是这个函数没有破坏性。如何使此功能具有破坏性?

好的,我知道我可以使用 apply这样做,但为了将来或切线目的,有没有办法使用循环来做同样的事情?

我决定求助于我的倒数第二个解决方案;使用列表长度横向列表。
(defun add-two-lists (list1 list2 list3)
(loop for x from 0 to (- (list-length list1) 1) do
(setf (nth x list3) (+ (nth x list1) (nth x list2))))
(values list3))

最佳答案

这是一种方法:

(defun add-two-lists (list1 list2 list3)
(loop for a in list1
for b in list2
for c on list3 do
(rplaca c (+ a b)))

附录

这是使用 map 而不是 loop 的另一种方式:
(defun add-two-lists (list1 list2 list3)
(mapl #'(lambda (cl al bl) (rplaca cl (+ (car al) (car bl))))
list3 list1 list2))

关于common-lisp - Lisp-遍历列表并替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com