List 在方案中的列表中添加或更新元素

List 在方案中的列表中添加或更新元素,list,lisp,scheme,racket,List,Lisp,Scheme,Racket,我有一个表格'((1'())(23)(34)(4'())中的列表,我想更新它。 例如,其中第一个值int 2被设置为第二个值5 结果是这样的 "(1)(2 5)(3 4)(4)) 我心里有这样的想法,但我不知道如何实施。。 我还想将结果插入到我使用的全局列表中 (定义(更新ls var1 var2) (相等?(var1(汽车(汽车ls)))(;将元素添加到列表)(更新(cdr ls) var1 var2) 假设: 只有一个子列表以2开头(我们要替换的子列表) 输入是一个子列表(不是引用列表,就像

我有一个表格'((1'())(23)(34)(4'())中的列表,我想更新它。 例如,其中第一个值int 2被设置为第二个值5

结果是这样的

"(1)(2 5)(3 4)(4))

我心里有这样的想法,但我不知道如何实施。。 我还想将结果插入到我使用的全局列表中

(定义(更新ls var1 var2)

(相等?(var1(汽车(汽车ls)))(;将元素添加到列表)(更新(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

    这里可以找到一个简单的表实现