Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > [XLISP] Найти элементы, встречающиеся в списке


Автор: lenochka90 20.9.2010, 19:10
помогите пожалуйста!!!
Определите функцию, зависящую от двух аргументов u и n, которая по данному списку u строит список его элементов, встречающихся в нем не менее n раз.

Автор: Void 20.9.2010, 20:39
Какой диалект Лиспа, какие ограничения на используемые средства, что пробовали и почему не получилось?
Вот вам на Common Lisp с хэш-таблицей и loop, но преподаватель едва ли обрадуется:
Код
(defun repeating-elements (u n)
    (let ((counters (make-hash-table :test 'equal)))
        (progn
            (loop for x in u do
                (incf (gethash x counters 0)))
            (loop for x being each hash-key of counters using (hash-value count)
                when (>= count n) collect x))))

Код
> (setq s '('cat 'dog 'horse 'cat 'pig 'cat 'dog))
('CAT 'DOG 'HORSE 'CAT 'PIG 'CAT 'DOG)
> (repeating-elements s 3)
('CAT)
> (repeating-elements s 2)
('DOG 'CAT)
> (repeating-elements s 1)
('PIG 'HORSE 'DOG 'CAT)

Автор: lenochka90 21.9.2010, 17:46
спасибо, а как для XLISP это можно сделать? я даже понятия не имею с чего начать.

Автор: _sg 25.4.2014, 12:39
как вариант Common Lisp:
Код

(defun drop<n (w n &aux (v (remove-duplicates w)))
  (remove-if #'(lambda (a) (< (count a w) n)) v))
 
> (drop<n '(40 2 8 9 4 2 8 9 4 1 4 1 2 8 7 9 7) 2)
(4 1 2 8 9 7)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)