Функция, которая находит количество вхождений каждого элемента в списке ввода - PullRequest
0 голосов
/ 24 мая 2018

Итак, я делаю программу, которая выводит мне количество вхождений каждого элемента в списке ввода.До сих пор мне удалось сделать это для одного символа.(В моем примере для с).Результат для кода ниже: 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 голосов
/ 25 мая 2018

Мне удалось решить проблему.Спасибо за ваши предложения.

(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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...