Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 22.05.2014
Сообщений: 23
1

Найти сумму первого и последнего элементов списка

30.12.2014, 11:11. Показов 2933. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите решить задачу, найти сумму элементов первого и последнего в списке
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2014, 11:11
Ответы с готовыми решениями:

Найти сумму первого и последнего элементов списка
Помогите написать процедуру задачи.Дан однонаправленный список,эл которого являются действительными...

Найти сумму первого и последнего элементов списка
Дан список, элементы которого являются действительными числами. Найти сумму первого и последнего...

Найти сумму первого и последнего элемента списка
Двунаправленный список.Найти сумму первого и последнего элемента. спасибо

Найти сумму первого и последнего из элементов
Решить: Создать массив с именем А из 10-ти элементов, задав значения его элементов с помощью...

12
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.12.2014, 11:46 2
Lisp
1
2
3
4
5
(defun sum-first-last (w)
  (apply #'+ (car w) (last w)))
 
> (sum-first-last '(1 2 3 4))
5
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
30.12.2014, 12:26 3
Поскольку для нахождения последнего элемента потребуется просмотр списка, то можно так:

Lisp
1
2
(defun task (lst)
  (+ (car lst) (car (reverse lst))))
или так:

Lisp
1
2
3
(defun task (lst &optional (s (car lst)))
  (cond ((null (cdr lst) (+ s (car lst)))
          (t (task (cdr lst) s)))
1
Заблокирован
30.12.2014, 14:08 4
Цитата Сообщение от _sg Посмотреть сообщение
(apply #'+ (car w) (last w))
Это в каком диалекте лиспа такое возможно???
1
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
30.12.2014, 14:18 5
ur_naz, CL

Добавлено через 1 минуту
Функция apply применяет функцию к одному и более аргументу, последним из которых должен быть список:
Lisp
1
2
3
4
> (apply #'* '(8 9 10))        
720
> (apply #'* 8 9 '(10))
720
1
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
31.12.2014, 03:11 6
Цитата Сообщение от Catstail Посмотреть сообщение
Поскольку для нахождения последнего элемента потребуется просмотр списка, то можно так
Catstail, вы так говорите будто reverse бесплатна. (+ (car xs) (car (last xs))) эффективнее, чем (+ (car xs) (car (reverse xs)). Ведь для последнего нужно в 2 раза больше памяти + время на формирование нового списка. Для того чтобы подобные операции выполнять действительно эффективно нужен вектор.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
31.12.2014, 10:03 7
Цитата Сообщение от nullxdth Посмотреть сообщение
Catstail, вы так говорите будто reverse бесплатна.
- отнюдь нет. Я писал, что до последнего элемента не добраться без просмотра списка до конца. Reverse - один из способов. Да, вектор (массив с прямым доступом по индексу) здесь будет эффективнее.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
31.12.2014, 14:55 8
Кстати, занятное ограничение: обобщённую функцию, например, для вектора и списка без runtime проверки типа написать не возможно в CL.

Добавлено через 38 секунд
А вот на C++ без проблем.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
31.12.2014, 15:24 9
Цитата Сообщение от nullxdth Посмотреть сообщение
А вот на C++ без проблем.
- Вы имеете в виду Template? Или виртуальную функцию? А может быть, банальную перегрузку?
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
31.12.2014, 15:31 10
Цитата Сообщение от Catstail Посмотреть сообщение
- Вы имеете в виду Template? Или виртуальную функцию? А может быть, банальную перегрузку?
Template конечно. Виртуальная функция - фактически runtime проверка.

Добавлено через 4 минуты
Что интересно, чекнуть задекларированный тип при macroexpand-е особого труда не составляет (через clt2 расширение):
Lisp
1
2
3
4
5
6
7
8
(defmacro info (var-name &environment env)
  `',(multiple-value-list (sb-cltl2:variable-information var-name env)))
 
(let ((x 2015))
  (declare (type integer x))
  (info x))
 
;; (:LEXICAL T ((TYPE . INTEGER)))
Но с таким механизмом можно соптимизировать лишь раскрытия макросов.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
01.01.2015, 13:05 11
Цитата Сообщение от nullxdth Посмотреть сообщение
Template конечно.
- а Template - это "закадровая" генерация нескольких процедур для разных типов данных... Или я это неверно понял?
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
07.01.2015, 03:19 12
Цитата Сообщение от Catstail Посмотреть сообщение
- а Template - это "закадровая" генерация нескольких процедур для разных типов данных... Или я это неверно понял?
Верно поняли.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
07.01.2015, 10:28 13
nullxdth, тогда это не слишком интересно... т.к. понятно.
0
07.01.2015, 10:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2015, 10:28
Помогаю со студенческими работами здесь

Найти сумму первого,последнего и центрального элементов массива из 20 элементов.
Дан массив из 20 чисел мо знаком. Найти сумму первого,последнего и центрального элементов массива....

Найти сумму первого, второго и последнего элементов массива
Здравствуйте. Нужно найти сумму первого, второго и последнего элементов массива ar = { 2, 3, 4, 5,...

Найти сумму элементов первого и последнего столбца матрицы
Дана целочисленная квадратная матрица. Найти сумму элементов первого и последнего столбца. ...

Найти сумму первого и последнего положительных элементов массива
Заданный массив действительных чисел X (n). Найти • сумму первого и последнего положительных...

Найти сумму элементов массива от первого до последнего нулевого
Собственно, проблема с тем, как определить этот самый последний элемент и запомнить его. Вот что...

Найти сумму первого и последнего положительных элементов последовательности
Существует текстовый файл, заполненный случайными числами. Числа в любом диапазоне и в любом...


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

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