;; 連想リスト (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")))
ヒントや回答をいただければ幸いです。