;; 关联列表 (al) 是
;; 空的或
;; (cons (list kv) alst), 其中
;; k 是一个 nat(密钥),
;; v 是一个字符串(值),并且
;; alst 是一个关联列表 (al)
updatestring 接受一个关联列表、一个数字 (findnum) 和一个字符串 (newstring),如果关联列表中有一个与 findnum 相同的数字,则它将列表中的字符串替换为 newstring。
(check-expect(updatestring empty 3 "hi") (list (list 3 "hi")))
(check-expect(updatestring (list (list 1 "hi")(list 5 "wow")) 5 "new")(list (list 1 "hi")(list 5 "new")))
(check-expect(updatestring (list (list 1 "hi")(list 5 "wow")) 2 "nice")(list (list 2 "nice") (list 1 "hi")(list 5 "wow")))
我遇到了代码问题,因为这就是我所拥有的。
(define (al-update alst akey avalue)
(cond
[(empty? alst) (list (list akey avalue))]
[(= (first(first alst)) akey) (al-update (rest alst) akey avalue)]
[else (list(list akey avalue alst))]))
问题是我的代码返回
(list (list 5 "new" (list (list 1 "hi") (list 5 "wow"))) instead of (list (list 1 "hi") (list 5 "new"))
和
(list(list 2 "nice" (list (list 1 "hi") (list 5 "wow")))) instead of (list (list 2 "nice") (list 1 "hi")(list 5 "wow")))
任何提示和答案将不胜感激,谢谢!