Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить рекурсивную функцию 
V
    Опции темы
kaizer131
Дата 14.9.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет




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

PM MAIL   Вверх
k0rvin
Дата 14.9.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Код

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



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
kaizer131
Дата 15.9.2010, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



не могу разобраться с порядком аргументов в функции (count-exclusive) 
Если не сложно можно привести пояснения к алгоритму.
PM MAIL   Вверх
kosmonaFFFt
Дата 15.9.2010, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Код

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


Пойдет?


--------------------
user posted image
PM MAIL ICQ   Вверх
kaizer131
Дата 15.9.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



Я так понимаю на вход функции необходимо передать список типа
>(count 134543)
возможно я ошибаюсь
PM MAIL   Вверх
kosmonaFFFt
Дата 15.9.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



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

(count '(1 2 3 4 5))

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

Это сообщение отредактировал(а) kosmonaFFFt - 15.9.2010, 09:42


--------------------
user posted image
PM MAIL ICQ   Вверх
k0rvin
Дата 15.9.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(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



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
kosmonaFFFt
Дата 16.9.2010, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



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

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


--------------------
user posted image
PM MAIL ICQ   Вверх
kaizer131
Дата 16.9.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 3.4.2009

Репутация: нет
Всего: нет



Всем спасибо за помощь !!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.