3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
1

Избавляемся от безымянной функции

16.12.2015, 22:46. Показов 483. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Есть такая функция:
Lisp
1
2
3
(defun f8 (mylist) 
(/ (apply #'+ mylist) (length mylist)) 
)
Она вычисляет среднее арифметическое только положительных чисел. Как вынести проверку в отдельную функцию?
P.S Вот попытка что-то сделать:
Lisp
1
2
3
4
5
6
7
8
(defun f8 (mylist) 
(setq n 0) 
(/(+ (apply f9 mylist) n) (length mylist)) 
) 
 
(defun f9 (x) 
cond ((< x 0) nil) 
(t (x)) )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2015, 22:46
Ответы с готовыми решениями:

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

Избавляемся от #ifdef DEBUG
Доброго времени суток. В своем проекте для отладки использую: #define DEBUG ... ... ......

Избавляемся от советника по переходу на Windows 10 (обсуждение)
Прошу прощения у модераторов, ноя не смог обратиться лично к вашему коллеге VAVUN. Очень бы...

Избавляемся от повторяющегося кода. Типовые решения
Здравствуйте, господа. Собственно, мне нужен совет. Есть куча подобного кода: IAddress _address;...

3
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
16.12.2015, 23:32 2
Lisp
1
2
3
4
5
(defun f8 (mylist &aux (v (remove-if-not #'plusp mylist)))
  (/ (reduce #'+ v ) (length v)))
 
> (f8 '(-10 100 1000))
550
Добавлено через 26 минут
Lisp
1
2
3
4
5
6
7
8
9
(defun average-of-positive (w
                            &optional (s 0) (n 0)
                            &aux (a (car w)))
  (cond ((null w) (/ s n))
        ((plusp a) (average-of-positive (cdr w) (+ s a) (1+ n)))
        ((average-of-positive (cdr w) s n))))
 
> (average-of-positive '(-10 100 1000))
550
Добавлено через 27 секунд
Lisp
1
2
3
4
5
6
(defun average-of-positive (w)
   (/ (loop for a in w when (plusp a) sum a)
      (loop for a in w when (plusp a) count a)))
 
> (average-of-positive '(-10 100 1000))
550
1
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
17.12.2015, 01:06  [ТС] 3
Надо вышеуказанную задачу решить именно с использованием apply.
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
17.12.2015, 02:04 4
Virviglaz, меняйте, но reduce предпочтительнее (apply имеет ограничение по количеству аргументов), можно проверить для конкретной реализации:
CLISP:
Lisp
1
2
> call-arguments-limit
4096
SBCL:
Lisp
1
2
> call-arguments-limit
536870911
1
17.12.2015, 02:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 02:04
Помогаю со студенческими работами здесь

Избавляемся от советника по переходу на windows 10, отключаем телеметрию
Избавляемся от советника по переходу на windows 10 (GWX) ВНИМАНИЕ ! Вся приведенная тут...

Избавляемся от jquery и пишем все на чистом JavaScript
Сделал велосипед, В переменной data, хранится html блок: &lt;div&gt; &lt;h5&gt;тест&lt;/h5&gt; ...

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть...

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru