[Закрыть]
 
popoff.donetsk.ua
Эмоции - это красивая обёртка для лжи. /Popoff/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Функциональное и логическое программирование - Помогите пожалуйста переделать с использованием lambda

Помогите пожалуйста переделать с использованием lambda

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Гость Lispy url://forum.message:2840
Помогите пожалуйста переделать с использованием lambda
Lispy

Привет всем. У меня вот проблема возникла.

Есть вот такой код:


<code>
(defun funx (x)
   (cond ((null x) nil)
      ((< (car x) 0) (cons (intern (format nil "*~a" (car x))) (funx (cdr x))))
      (T (cons (car x) (funx (cdr x)))))) </code>


Мне нужно как-то его переделать чтоб использовалась lambda функция т.е сделать эту функцию анонимной.
Помогите пожалуйста. Уже 10 день бъюсь.

Это сообщение было отредактировано гостем, оставившим это сообщение 10.06.09 04:51.
popoff
Yuri
Июл, 2004
Сообщений: 929
popoff url://forum.message:2841

Мне нужно как-то его переделать чтоб использовалась lambda функция т.е сделать эту функцию анонимной.

Lispyфорумы popoff.donetsk.ua

Так чтобы использовалась λ-выражение внутри функции funx, или саму функцию funx преобразовать в λ-выражение? Или ещё как-то? Что именно Вам не понятно?

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость Lyspi url://forum.message:2842
Lyspi

Приветствую.
Да именно. Саму функцию преобразовать в ламбда и применить к какому нибудь списку например (setq a'(-1 -2 4 5-7) -ну это уже не в самой функции а отдельно просто для примера. фактически код ставит знак * перед каждым отриц элементом.  Меня коротит на рекурсии куда её деть как обойти. Читаю теорию, перечитываю. кажется что вроде бы все понятно но как только доходит до компиляции вот тут и начинается неравный бой.

popoff
Yuri
Июл, 2004
Сообщений: 929
popoff url://forum.message:2843

Меня коротит на рекурсии куда её деть как обойти.

Lyspiфорумы popoff.donetsk.ua

Никак не обойти.

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

Вероятнее всего, Вы не правильно поняли Ваше задание.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость Lispy url://forum.message:2845
Lispy

По заданию нужно «при вызове использовать лямбда функцию». Нарисовалась еще одна проблема! Так как изначально mulisp мне както не понравился я весь код писал на CL (я имею ввиду предыдущие задания) теперь оказалось что он (mulisp) кажется не понимает функции format nil... ругается? А тогда какая же там альтернатива?

popoff
Yuri
Июл, 2004
Сообщений: 929
popoff url://forum.message:2846

Саму функцию преобразовать в ламбда

Lyspiфорумы popoff.donetsk.ua

По заданию нужно «при вызове использовать лямбда функцию».

Lispyфорумы popoff.donetsk.ua

Вам нужно разобраться с тем, что Вы хотите сделать. Когда Вы будете готовы - зададите Ваш вопрос.

он (mulisp) кажется не понимает функции format nil... ругается? А тогда какая же там альтернатива?

Lispyфорумы popoff.donetsk.ua

Я не знаю, что делает функция format.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость Lispy url://forum.message:2850
Lispy

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

(defun funx (x)
        (mapcar (lambda (fn)
         (if (< fn 0)
          (intern (format nil "*~a" fn))
           fn))x))


но это оказалось неправильно т.е все работает но не соответствует требованию задания. Если конкретизировать то необходимо составить функционал который должен иметь 2 аргумента имя функции (проверяющей свойство) и список.
А алгоритм такой: если список пуст, то результат – пустой список если голова списка обладает свойством (для проверки можно использовать FUNCALL), то соединяем *, голову и рекурсивно преобразованный хвост списка можно CONS а в остальных случаях  соединяем голову и рекурсивно преобразованный хвост списка.
Т.е чтоб можно было сделать вот такие обращения
funx((LAMBDA (x) (>= x 0)) ‘(1 0 -2 3 0 -4 5)) –> (* 1 0 -2 * 3 0 -4 * 5)
funx(‘EVENP  ‘(1 0 -2 3 0 -4 5)) –> (1 * 0 * -2 3 * 0 * -4 5)

А теперь вот сижу и хлопаю ушами вчитываюсь в задание ... иными словами смотрю в книгу а вижу ...

Это сообщение было отредактировано гостем, оставившим это сообщение 15.06.09 05:09.
popoff
Yuri
Июл, 2004
Сообщений: 929
popoff url://forum.message:2853

Lispy,
Вы не задали вопрос.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость Lispy url://forum.message:2855
Lispy

Проблема моя сложна для меня но вот вопрос мой очень прост «как?»
Помогите разобраться что нужно то т.е что нужно в принципе я описал но вот понять это не могу, снова код снова ошибки..

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Обмен электронных валют
money.dn.ua