Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как переделать чтоб было как надо, Переделать функцию 
:(
    Опции темы
BCworm
Дата 22.8.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем. Совсем замучался. Мне нужно было написать функцию которая ставит символ @ перед каждым элементом списка отвечающего критерию например каждым элементом который больше 0 или каждым нечетным элементом. Я написал вот так

Код

(defun mufunc  (x)
    (cond ((null x) nil)
         ((evenp (car x)) (cons (intern (format nil "@~a" (car x)))               
                      (mufunc (cdr x))))
                 (T (cons (car x) (mufunc  (cdr x))))))



Это работает!
 Но я сделал не совсем так мне нужно чтоб можно было это все вызывать вот так
mufunc((LAMBDA (x) (>= x 0)) ‘(1 0 -2 3 0 -4 5)) –> (@ 1 0 -2 @ 3 0 -4 @ 5) - для отриц чисел 

mufunc(‘EVENP  ‘(1 0 -2 3 0 -4 5)) –> (1 @ 0 @ -2 3 @ 0 @ -4 5) - и так для нечетных


Помогите пожалуйста.

PM MAIL   Вверх
kosmonaFFFt
Дата 22.8.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Видимо надо передавать в твою функцию два параметра - функцию проверки и список, и проверять условие истиности
вызова переданной функции с элементом списка... Как-то так...


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


Бывалый
*


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

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



Код
(defun F (P L)
 (if L
  (if (funcall P (car L))
   (cons '@ (cons (car L) (F P (cdr L))))
   (cons (car L) (F P (cdr L))))))

P - предикат, L - список
Вам это не для AutoCAD нужно?
PM MAIL   Вверх
_sg
Дата 25.4.2014, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

(defun insert-@ (w f &aux (a (car w)) (d (cdr w)))
  (cond ((null w) nil)
        ((funcall f a) (cons '@ (cons a (insert-@ d f))))
        ((cons a (insert-@ d f)))))

> (insert-@ '(1 0 -2 3 0 -4 5) #'evenp)
(1 @ 0 @ -2 3 @ 0 @ -4 5)
> (insert-@ '(1 0 -2 3 0 -4 5) #'(lambda (x) (>= x 0)))
(@ 1 @ 0 -2 @ 3 @ 0 -4 @ 5)

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

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

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


 




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


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

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