Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите, пожалуйста с функционалами 
:(
    Опции темы
ILCDWork
Дата 26.8.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, помогите, пожалуйста решить следующую задачу. Как-то сложно у меня идет с функционалами.

 Опpеделите на языке ЛИСП функционал, вставляющий перед каждым элементом списка, обладающим определенным свойством, символ *. Проверьте работу функционала для предикатов:
 -неотрицательное число (при вызове используйте лямбда-функцию); 
 -четное число.
В теле функции использование операторов set и setq не допускается!

Очень надеюсь на помощь.


Это сообщение отредактировал(а) ILCDWork - 26.8.2011, 10:52
PM MAIL   Вверх
newbee
Дата 26.8.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



Код

(defun asterisk (fnc pair)
 (if pair
  (if (funcall fnc (car pair))
   (cons '* (cons (car pair) (asterisk fnc (cdr pair))))
   (cons (car pair) (asterisk fnc (cdr pair))))))

(defun asterisk (fnc pair)
 (if pair
  (let ((x (cons (car pair) (asterisk fnc (cdr pair)))))
   (if (funcall fnc (car pair)) (cons '* x) x))))

;--------

(print (asterisk 'oddp '(1 2 3 4)))
(print (asterisk (lambda (x) (>= x 0)) '(1 2 0 -5 3 -1)))



Общелисп. Выбирай, какая больше нравится.

Это сообщение отредактировал(а) newbee - 26.8.2011, 11:38


--------------------
You're face to face
With man who sold the world
PM   Вверх
ILCDWork
Дата 26.8.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробую запускать на muLisp.

(print (asterisk 'oddp '(1 2 3 4))) - проходит нормально.

(print (asterisk (lambda (x) (>= x 0)) '(1 2 0 -5 3 -1)))
Пишет:
Undefined Function Break: (LAMBDA (X) (>= X 0))
Continue, Break, Abort, Top-level, Restart, System?
Нажимаю C - результат выдается правильный.
Смущает только наличие ошибки.

PM MAIL   Вверх
newbee
Дата 26.8.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

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



ILCDWork, смотри в своем учебнике или лекциях, как правильно записывать лямбда-функцию. Попробую угадать:

(print (asterisk #'(lambda (x) (>= x 0)) '(1 2 0 -5 3 -1)))

Добавлено через 3 минуты и 10 секунд
Еще нагуглилась такая запись: ((lambda (x) (>= x 0))). Если оба варианта не подойдут, читай лекции.


--------------------
You're face to face
With man who sold the world
PM   Вверх
_sg
Дата 25.4.2014, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как вариант:
Код

(defun insert-asterisc (p w &aux (a ( car w)) (d ( cdr w)))
  (cond ((null w) nil)
        ((funcall p a) (cons '* (cons a (insert-asterisc p d))))
        ((cons a (insert-asterisc p d)))))
 
> (insert-asterisc #'(lambda (a) (not (minusp a))) '(-1 2 -3 -4 -5 -6 7 0 9))
(-1 * 2 -3 -4 -5 -6 * 7 * 0 * 9)
> (insert-asterisc #'evenp '(-1 2 -3 -4 -5 -6 7 8 9))
(-1 * 2 -3 * -4 -5 * -6 7 * 8 9)

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

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

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


 




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


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

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