我有一个这种形式的列表'((1'())(2 3)(3 4)(4'()))我想更新它。 例如。其中第一个值int 2放到第二个值5
,结果将是这样的
'((1'())(2 5)'(3 4)(4'()))
我记得这样,但我不知道如何实现它。 我还想将结果插入到我使用的全局列表中(define(update ls var1 var2)
(等于?(var1(car(car ls)))(;将元素添加到列表中)(更新(cdr ls)) var1 var2)
答案 0 :(得分:0)
假设:
2
开头的子列表(我们要替换的那个) ...然后一个简单的解决方案是使用map
创建一个包含更新的新列表:
(define lst '((1 '()) (2 3) (3 4) (4 '())))
(map (lambda (e)
(if (= (car e) 2) ; check if this is the pair we want to update
(list 2 5) ; if so, create a new modified sublist
e)) ; else keep the sublist as it comes
lst)
=> '((1 '()) (2 5) (3 4) (4 '()))
答案 1 :(得分:0)
Oscar答案的一个问题是,如果你想将列表用作全局变量,你必须将它与每个函数调用一起传递,或者使用set!生成一个全新的列表后。
这里可以找到一个简单的表实现。 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_sec_3.3.3