0

我有一个这种形式的列表 '( (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 )

4

2 回答 2

0

假如说:

  1. 只有一个以2(我们要替换的那个)开头的子列表
  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 '()))
于 2013-11-04T03:24:36.497 回答
0

Oscar 回答的一个问题是,如果要将列表用作全局变量,则必须将其与每个函数调用一起传递,或者使用 set!在您生成一个全新的列表之后。

可以在这里找到一个简单的表实现。http://mitpress.mit.edu/sicp/full-text/book/book-ZH-22.html#%_sec_3.3.3

于 2013-11-05T05:16:42.797 回答