Счет суммы чисел списка
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Счет суммы чисел списка

Счет суммы чисел списка

Ответ
Поиск в этой теме
Непрочитано 18.07.2011, 16:07 #1
Счет суммы чисел списка
proektant-minsk
 
Проектировщик ОВ
 
Минск
Регистрация: 15.10.2010
Сообщений: 42

Дано:
Список типа (list a1 a2 a3 ... an), где а - целое или вещественное число.

Найти: а1 + а2 + а3 + ... + аn, не используя length и repeat, и прочих циклов.

Примечание: Возможно в VisualLisp уже есть готовые функции для этого? Было бы интересно посмотреть как эту задачу можно решить при помощи рекурсии.

Пример: (sum_list (list 1 10 100 1000 0.5) ) -> 1111.5

Заранее спасибо, тем кто отзовется
Просмотров: 2657
 
Непрочитано 18.07.2011, 16:09
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Код:
[Выделить все]
 (apply '+ (list a1 a2 a3...))
Цитата:
Было бы интересно посмотреть как эту задачу можно решить при помощи рекурсии.
Код:
[Выделить все]
 (defun plus (lst) (if lst (+ (car lst) (plus (cdr lst))) 0))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 18.07.2011, 16:43
#3
WOL4OHOK


 
Регистрация: 17.06.2009
Сообщений: 10


Уважаемый Дмитрий, не могли бы вы объяснить последнию строку? ((defun plus (lst) (if lst (+ (car lst) (plus (cdr lst))) 0)))

Лисп тока начал изучать, че то не соображу как она работает.
WOL4OHOK вне форума  
 
Непрочитано 18.07.2011, 16:49
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Код:
[Выделить все]
 (defun plus (lst) ; объявляем функцию Plus
  (if lst  ; есть ли в списке что-нибудь
      (+ (car lst) ;если да то прибавляем к первому элементу списка
         (plus (cdr lst))) ;результат "свежеобъявленной" функции plus от списка без первого элемента
      0)) ;если в списке ничего нет то возращаем ноль(к которому добавятся все предудущие аргументы)
таким образом - если "развернуть" рекурсию от (plus '(1 2 3 4 5)) получаем 1+2+3+4+5+0
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 18.07.2011, 17:02
#5
WOL4OHOK


 
Регистрация: 17.06.2009
Сообщений: 10


Огромное спасибо, доперло. =)
WOL4OHOK вне форума  
 
Непрочитано 18.07.2011, 22:28
#6
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Код:
[Выделить все]
 (eval (cons '+ (list a1 a2 a3 ... an)))
Oliver_88 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Счет суммы чисел списка



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать сортировку списка атрибутов блока Wertgan Программирование 11 30.04.2015 17:17
Сортирвка списка последовательно, по приоритетам (вопрос) Tonic Программирование 9 02.02.2010 14:25
структурированный список Holon Программирование 22 11.09.2007 14:09
Исключение элементов одного списка из другого по маске Кулик Алексей aka kpblc Программирование 3 18.09.2006 17:31
чтение данных из файла Александер Программирование 6 08.09.2005 10:24