Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Требуется написать рекурсивную функцию
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
toxa161 toxa161 вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.07.2009
По умолчанию Требуется написать рекурсивную функцию - 21.07.2009, 18:22

написать рекурсивную функцию, которая вычисляет сумму всех чисел от 0-го аргумента функции до последнего >=0.
Ответить с цитированием
  (#2 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 23.07.2009, 09:42

Пока с функцией-оберткой:
Код:
(defun F (&rest args)
  (apply (function F0) (cons nil args)))
(defun F0 (acc &rest args)
  (if (null args) 0
   ((lambda (elem tail)
     (if (minusp elem)
      (apply (function F0) (cons (cons elem acc) tail))
      (+ (apply '+ acc) elem (apply (function F0) (cons nil tail)))))
    (car args)
    (cdr args))))
Впрочем, среди аргументов могут быть не числа, следовательно:
Код:
(defun F0 (acc &rest args)
  (if (null args) 0
   ((lambda (elem tail)
     (if (numberp elem)
      (if (minusp elem)
       (apply (function F0) (cons (cons elem acc) tail))
       (+ (apply '+ acc) elem (apply (function F0) (cons nil tail))))
      (apply (function F0) (cons acc tail))))
    (car args)
    (cdr args))))
Ответить с цитированием
  (#3 (permalink)) Старый
toxa161 toxa161 вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.07.2009
По умолчанию 24.07.2009, 12:07

спасибо )))))
Ответить с цитированием
  (#4 (permalink)) Старый
toxa161 toxa161 вне форума
Member
 
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.07.2009
По умолчанию 27.07.2009, 20:41

а не могли бы разъяснить, а то не понятно ))
Ответить с цитированием
  (#5 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 27.07.2009, 21:34

А что непонятно?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
kugur kugur вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.07.2009
По умолчанию 28.07.2009, 15:35

Вот такая же по непонятности задача тоже не понимаю ее))))))))))))))
Ответить с цитированием
  (#7 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 29.07.2009, 00:27

Идея простая: так как надо вычислить сумму числовых аргументов (количество которых произвольно) функции до последнего большего или равного нулю, можно использовать накопитель acc, в котором накапливать сумму встречающихся отрицательных чисел до появления очередного неотрицательного числа, после чего и содержимое накопителя, и это число прибавить к вычисляемой сумме, а если до конца аргументов неотрицательное число не встретится, то сумма в накопителе просто игнорируется.
Для возможности применения функции к произвольному количеству аргументов используется ключевое слово &rest, за которым следует символ, связываемый со списком аргументов (в данной функции символ args). Параметр-накопитель располагается в начале списка параметров.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать рекурсивную функцию Аннушка Visual Basic 0 29.12.2010 19:18
Определите рекурсивную функцию MBR Pavel123 Lisp 0 20.12.2010 17:58
Требуется написать функцию на украинском языке Vovulya Lisp 1 26.10.2010 22:06
Требуется написать функцию, которая на вход, к примеру, получает список jonko Lisp 3 24.04.2010 22:20
Как написать рекурсивную функцию Tani91 Lisp 2 10.03.2010 00:51
Написать рекурсивную функцию,которая вычисляет сумму всех чисел kugur Lisp 1 22.07.2009 18:50
Нужно написать рекурсивную функцию, которая возвращает t Bender266 Lisp 6 06.05.2009 14:40
Как написать рекурсивную функцию RANK MILA270 Lisp 0 01.12.2007 18:41
Требуется написать рекурсивную функцию, определяющее количество листьев у дерева Oo][Ais Lisp 8 06.06.2007 17:32
еобходимо написать рекурсивную функцию на Lisp gas Lisp 1 02.05.2007 08:24
Определить рекурсивную функцию Alexeika Lisp 1 21.11.2004 23:18
Требуется написать функцию f Dmitry G. Lisp 1 12.10.2004 08:07



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов