在 Beginner Racket 中创建 Python 的 collections.counter() 方法
Create Python's collections.counter() method in Beginner Racket
目标是创建一个接受符号列表并生成键值对列表的函数,该列表计算列表中每个符号出现的次数。例如:
(counter (list 't 't 'c 'a)) -> (list (list 't 2) (list 'c 1) (list 'a 1))
函数必须用递归完成
我只创建了一个将重复项视为独立值的键值对列表:
(define val 0)
(define (counter los)
(cond
[(empty? los) empty]
[else (cons (list (first los) (add1 val))
(counter (rest los)))]))
(counter (list 't 't 'c 'a)) -> (list (list 't) (list 't) (list 'c 1) (list 'a 1))
我已经很久没有使用BSL了,但我相信这些操作都存在。可能有更简洁的方法,但我会留给您检查文档并尽可能简化它
(define (counter los) (counter-helper los empty))
(define (counter-helper los lists)
(cond
[(empty? los) lists]
[else (if (list? (assq (first los) lists))
(counter-helper
(rest los)
(cons (list (first los) (add1 (second (assq (first los) lists))))
(remove (assq (first los) lists) lists)))
(counter-helper (rest los) (cons (list (first los) 1) lists)))]))
if
语句检查我们的列表列表中是否已经存在该键的条目,returns 如果是,则匹配对,否则 false
。
如果结果是 false
,我们只需附加一个值为 1 的新对并重复出现。
如果它已经存在,我们从前一对构造一个新的对,使用相同的键,但值递增并将这个新对添加到我们的列表列表中 - 删除前一对
目标是创建一个接受符号列表并生成键值对列表的函数,该列表计算列表中每个符号出现的次数。例如:
(counter (list 't 't 'c 'a)) -> (list (list 't 2) (list 'c 1) (list 'a 1))
函数必须用递归完成
我只创建了一个将重复项视为独立值的键值对列表:
(define val 0)
(define (counter los)
(cond
[(empty? los) empty]
[else (cons (list (first los) (add1 val))
(counter (rest los)))]))
(counter (list 't 't 'c 'a)) -> (list (list 't) (list 't) (list 'c 1) (list 'a 1))
我已经很久没有使用BSL了,但我相信这些操作都存在。可能有更简洁的方法,但我会留给您检查文档并尽可能简化它
(define (counter los) (counter-helper los empty))
(define (counter-helper los lists)
(cond
[(empty? los) lists]
[else (if (list? (assq (first los) lists))
(counter-helper
(rest los)
(cons (list (first los) (add1 (second (assq (first los) lists))))
(remove (assq (first los) lists) lists)))
(counter-helper (rest los) (cons (list (first los) 1) lists)))]))
if
语句检查我们的列表列表中是否已经存在该键的条目,returns 如果是,则匹配对,否则 false
。
如果结果是 false
,我们只需附加一个值为 1 的新对并重复出现。
如果它已经存在,我们从前一对构造一个新的对,使用相同的键,但值递增并将这个新对添加到我们的列表列表中 - 删除前一对