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


Автор: kaizer131 14.9.2010, 12:50

Помогите пожалуйста с задачей В диалекте XLISP
Определить рекурсивную функцию, возвращающую количество элементов в списке без какого-либо указываемого элемента. 
В лиспе пока не силён поэтому обращаюсь к знающим людям.

Автор: k0rvin 14.9.2010, 17:26
Код

(defun count-exclusive (x ys &key (test 'eql))
  (let ((c 0))
    (dolist (y ys c)
      (unless (funcall test y x)
    (incf c)))))

Автор: kaizer131 15.9.2010, 07:53
не могу разобраться с порядком аргументов в функции (count-exclusive) 
Если не сложно можно привести пояснения к алгоритму.

Автор: kosmonaFFFt 15.9.2010, 09:21
Код

(defun count (list)
 (let ((c 0))
  (if (rest list)
   (+ (count (rest list)) 1)
   0)))


Пойдет?

Автор: kaizer131 15.9.2010, 09:37
Я так понимаю на вход функции необходимо передать список типа
>(count 134543)
возможно я ошибаюсь

Автор: kosmonaFFFt 15.9.2010, 09:40
Цитата(kaizer131 @  15.9.2010,  13:37 Найти цитируемый пост)
Я так понимаю на вход функции необходимо передать список типа
>(count 134543)
возможно я ошибаюсь 

(count '(1 2 3 4 5))

без какого-либо указываемого элемента - немного не понял, это как?

Автор: k0rvin 15.9.2010, 17:30
Цитата(kosmonaFFFt @ 15.9.2010,  09:21)
Код

(defun count (list)
 (let ((c 0))
  (if (rest list)
   (+ (count (rest list)) 1)
   0)))


Пойдет?

не пойдёт. нужно подсчитать количество элементов неэквивалентных заданному.
(и let ((c 0)) в Вашем коде не нужен =))
Код

(defun count-exclusive (x ys &key (test 'eql))
  (if (null ys)
      0
      (+ (if (funcall test (first ys) x) 0 1)
         (count-exclusive x (rest ys) :test test))))

использование:
Код

(count-exclusive 0 '(1 2 3 0 4 5 0 6))
; => 6

Автор: kosmonaFFFt 16.9.2010, 05:57
Цитата(k0rvin @  15.9.2010,  21:30 Найти цитируемый пост)
(и let ((c 0)) в Вашем коде не нужен =))

Ага, точно... smile Просто заглючило мну малость, вот и написал...

Автор: kaizer131 16.9.2010, 12:48
Всем спасибо за помощь !!!

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