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)))

现在我正在尝试将其升级为打印 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/

相关文章:

Lisp 关联列表错误

list - Lisp 合并模式

Ruby:如何将数组拼接成 Lisp 风格的列表?

algorithm - Racket 上的动态规划

lisp - 将二进制字符串转换为数字

scheme - 在 Scheme 中,普通的、未引用的列表是否有语法糖?

lisp - 在另一个函数中调用 flet 定义的函数

lisp - 理解 Common Lisp do 宏语法

lisp - LISP gensym 和 Let 函数的问题

clojure - 按契约(Contract)库为 Common Lisp 设计?