所以我正在编写一个程序,它将向我打印输入列表中每个元素的出现次数。到目前为止,我已经设法为单个符号做到了。 (在我的 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 出现次数的方式。例如输出将如下所示:((a 2)(b 3)(c 2)(d 1))
。
最佳答案
我已经设法解决了这个问题。感谢您的建议。
(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)))
关于lisp - 查找输入列表中每个元素出现次数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516012/