我想计算列表中的元素并返回一个列表,其中包含与它们各自的数量
配对的元素类似的东西:
输入:
(count-elements '(a b d d a b c c b d d))
输出:
((a 2) (b 3) (d 4) (c 2))
我该怎么办?我试图配对元素及其会计
没有任何成功答案 0 :(得分:1)
您的问题可分为三大部分:
remove-duplicates
count
push
完成。守则:
(defun count-elements (lst)
(loop for i in (remove-duplicates lst)
with ans = nil
do (push (list i (count i lst)) ans)
finally (return ans)))
CL-USER> (count-elements '(a a b c))
((C 1) (B 1) (A 2))
CL-USER> (count-elements '(a b c d d a b s a c d))
((D 3) (C 2) (A 3) (S 1) (B 2))
CL-USER>
注意:由于remove-duplicates
编辑:正如coredump指出的那样,count-elements
的更好版本将是:
(defun count-elements (lst)
(map 'list
(lambda (e)
(list e (count e lst)))
(remove-duplicates lst)))