我有一个这种形式的列表 '( (1'()) (2 3) (3 4) (4 '()) ),我想更新它。例如。其中第一个值 int 2 放入第二个值 5
结果会是这样
'( (1'()) (2 5) '(3 4) (4 '()) )
我有这样的想法,但我不知道如何实现它..我也想将结果插入到我使用的全局列表中
(定义(更新 ls var1 var2)
(equal? (var1 (car (car ls))) ( ; 将元素添加到列表 ) (update (cdr ls) var1 var2 )
假如说:
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 '()))
Oscar 回答的一个问题是,如果要将列表用作全局变量,则必须将其与每个函数调用一起传递,或者使用 set!在您生成一个全新的列表之后。
可以在这里找到一个简单的表实现。http://mitpress.mit.edu/sicp/full-text/book/book-ZH-22.html#%_sec_3.3.3