update-or-add 是一个关联列表,包含一个整数 k 和一个字符串 str。如果关联列表中有与 k 相同的数字,则将关联的字符串替换为 str。
例如,(update-or-add empty 2 "new")=> (list 2 "new")
(update-or-add
(list (list 3 "three") (list 1 "one") (list 2 "two")) 3 "new3")
=> (list (list 3 "new3") (list 1 "one") (list 2 "two"))
(update-or-add
(list (list 3 "three") (list 1 "one") (list 2 "two")) 0 "z")
=> (list (list 3 "three") (list 1 "one") (list 2 "two") (list 0 "z"))
请注意,生成的列表必须是与alst具有相同相对顺序的键的关联列表(如果更新与现有键 k 关联的值,如第一个示例所示),并且如果添加新的键和值,则此新关联应该添加在 alst 的末尾(如第三个示例中所示)。
这是我现在的代码:
(define (update-or-add alst k v)
(cond
[(empty? alst) (list k v)]
[(equal? (first (first alst)) k)
(cons (list (first(first alst)) v)
(add-or-update (rest alst) k v))]
[else (cons (first alst) (update-or-add (rest alst) k v))]))
但是上面所说的第二个和第三个测试没有通过,谁能告诉我问题出在哪里以及如何纠正它?谢谢!