查找输入列表

时间:2018-05-24 18:35:07

标签: 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))

1 个答案:

答案 0 :(得分:0)

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

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