Lisp 函数,用于查找输入列表中每个元素的出现次数

Lisp 函数,用于查找输入列表中每个元素的出现次数,lisp,Lisp,因此,我正在制作一个程序,将打印输入列表中每个元素的出现次数。到目前为止,我已经设法做到了一个单一的符号。(在我的c示例中)。下面代码的结果为2 (defun stejem (a L) (cond ((null L) 0) ((equal a (car L)) (+ 1 (stejem a (cdr L)))) (t (stejem a (cdr L))))) (print (stejem 'c '(a b c b b a c d))) 现在我正在尝试将它升级到一种方式

因此,我正在制作一个程序,将打印输入列表中每个元素的出现次数。到目前为止,我已经设法做到了一个单一的符号。(在我的c示例中)。下面代码的结果为2

(defun stejem (a L)
  (cond
   ((null L) 0)
   ((equal a (car L)) (+ 1 (stejem a (cdr L))))
   (t (stejem a (cdr L)))))

(print (stejem 'c '(a b c b b a c d)))

现在我正在尝试将它升级到一种方式,它将打印a、b、c和d的出现次数。例如,输出如下:
((a2)(b3)(c2)(d1))

我设法解决了这个问题。谢谢你的建议

(defun len (l)
  (if l
    (1+ (len (cdr l)))
    0))

(defun filter (s c)
    (cond ((equal c (car s)) (cons (car s) (filter (cdr s) c)))
          ((null s) nil)
          (t (filter (remove (car s) s) c))))

(defun ponavljanje (s)
    (cond ((null s) nil)
          (t (cons (cons (car s)
                         (cons (len (filter s (car s))) nil))
                   (ponavljanje (remove (car s) s))))))

(print (ponavljanje '(a b c b b a c d)))

我想你的意思是“单一符号”。函数中没有只对字符有效的东西。欢迎使用堆栈溢出!StackOverflow不是免费的编码服务。所以我希望你能。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)将关联列表作为另一个参数传递给函数。如果当前符号已在a列表中,请将1添加到相应的值。否则,将带有符号和
1
的列表推到a列表上。然后递归调用该函数。最后,返回a列表。@Barmar是的,我指的是符号。谢谢你这么清楚的回答!没有人教你有效的通用口齿不清。内置:
(计数'c'(a b c b a c d))