Racket-从关联列表中删除一个密钥



我正试图编写一个函数,该函数使用一个数字、键和一个关联列表al,并生成从al中删除键后产生的关联列表。例如:

(check-expect (remove-al 5 (list (list 4 "A") (list 5 "B") (list 1 "C")))
(list (list 4 "A") (list 1 "C")))

我不被允许使用某些函数,比如map、filter或remove,但到目前为止我已经成功地编写了这些函数。以下是我的代码:

define (remove-al key al)
(cond
[(empty? al) empty]
[(= key (first (first al))) empty]
[else (cons (first al)
(remove-al key (rest al)))]))

我的代码哪一部分错了?

此算法背后的概念是将其视为扩展的附加实现。如果要在Racket中查找append的实现,它是一种递归算法,其中基本情况检查rhs列表是否为空,但如果不是,则将lhs列表的第一个值与lhs列表和rhs的其余部分的递归调用结果进行比较。这是实现的链接。该算法只是一个带有额外检查的append实现,以确保在列表的第一个元素与键匹配时忽略cons递归调用。

扰流板

---->

(define (remove-al key lhs rhs)
(cond [(empty? lhs) rhs]
[else (cond [(not (=(first (first lhs)) key))
(cons (first lhs) (remove-al key (rest lhs) rhs))]
[else (remove-al key (rest lhs) rhs)])]))
(check-expect (remove-al 5 (list (list 4 "A") (list 5 "B") (list 1 "C")) '() )
(list (list 4 "A") (list 1 "C")))

最新更新