На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Подскажите пожалуйста, в чем ошибка? , Lisp
      Дано такое задание:Определите функцию (f s) вычисляющую знакочередующую сумму
      a1-a2+a3-a4+…ak*(-1)^(k+1)

      Вот что я написала:
      (defun sum (s)
      (labels ((sm (m k)
      (if (eql k m) 0
      (+ (* (expt '-1 y) (first x)) (+ y 1))) ))
      (sm s 0))
      )

      Где я ошиблась, подскажите пожалуйста!!! :(
        Начинаем с задания. Сказано, что функция зависит от S, но в формуле
        вместо S фигурируют число K и набор Ai. Какая между ними связь?

        Теперь о программе. Та же проблема: у функции SM два параметра: K и M,
        а в формульной части используются неизвестные переменные X и Y. Далее,
        в формуле стоит сумма нескольких слагаемых, количество которых задано
        параметром. В Лиспе для подсчета такой суммы используются циклы,
        применяющие функционалы или рекурсия, но ничего такого в программе
        явно нет.

        Еще совет: если Вы не знаете, что делает Ваша программа, напишите
        комментарии к каждой ее части, начиная с самых мельчайших (всех
        переменных), а затем переходя к более крупным. Это не сделает
        программу правильной, но будет понятно, что не так.
          tanya, действительно, задача до конца не ясна. Но тем не менее могу предложить такое решение:
          ExpandedWrap disabled
            (trace start sum)
            (defun start (s)
                (sum s T)
            )
             
            (defun sum (s odd)
                (cond ((null s) 0)
                      (odd (+ (sum (cdr s) nil) (car s)))
                      (T (- (sum (cdr s) T) (car s)))
                )
            )
             
            (defun tt ()
                (start '(2 4 6 1))
            )
            tanya, действительно, задача до конца не ясна. Но тем не менее могу предложить такое решение:
            ExpandedWrap disabled
              (trace start sum)
              (defun start (s)
                  (sum s T)
              )
               
              (defun sum (s odd)
                  (cond ((null s) 0)
                        (odd (+ (sum (cdr s) nil) (car s)))
                        (T (- (sum (cdr s) T) (car s)))
                  )
              )
              (defun tt ()
                  (start '(2 4 6 1))
              )
              В задании есть еще такая строчка, что список S имеет вид (a1 a2 a3...ak)
              Это что-нибудь меняет? Я, честно говоря на эту строчку внимания не обратила...
              А писать нужно было, используя локальные или вспомогательные функции.
              Сообщение отредактировано: tanya -
                ExpandedWrap disabled
                  (defun reduce (x start combinator)
                    (defun iter (left res)
                      (if (null left) res
                        (iter (cdr left)
                              (funcall combinator res (car left)))))
                    (iter x start))
                   
                  (defun sum (x)
                    (reduce x 0 #'+))
                   
                  (defun range (n)
                    (defun rev (k)
                      (if (zerop k) nil
                        (cons k (rev (1- k)))))
                    (nreverse (rev n)))
                   
                  (defun f (s)
                    (sum (map 'list #'(lambda (ai i)
                                        (* ai (if (oddp (1+ i)) -1 1)))
                              s (range (length s)))))
                   
                  (f '(1 2 3 4))
                Сообщение отредактировано: uj -
                  tanya, погоди-ка. Я ведь так и сделал!!!!!!!!! Смотри внимательно!!!!!!!
                    Господи, спасибо тебе за то что на этом форуме есть такие умные люди, как Platonis!!!
                    Сообщение отредактировано: tanya -
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0261 ]   [ 14 queries used ]   [ Generated: 19.05.24, 08:56 GMT ]