Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.205.18] |
|
Сообщ.
#1
,
|
|
|
Дано такое задание:Определите функцию (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)) ) Где я ошиблась, подскажите пожалуйста!!! |
Сообщ.
#2
,
|
|
|
Начинаем с задания. Сказано, что функция зависит от S, но в формуле
вместо S фигурируют число K и набор Ai. Какая между ними связь? Теперь о программе. Та же проблема: у функции SM два параметра: K и M, а в формульной части используются неизвестные переменные X и Y. Далее, в формуле стоит сумма нескольких слагаемых, количество которых задано параметром. В Лиспе для подсчета такой суммы используются циклы, применяющие функционалы или рекурсия, но ничего такого в программе явно нет. Еще совет: если Вы не знаете, что делает Ваша программа, напишите комментарии к каждой ее части, начиная с самых мельчайших (всех переменных), а затем переходя к более крупным. Это не сделает программу правильной, но будет понятно, что не так. |
Сообщ.
#3
,
|
|
|
tanya, действительно, задача до конца не ясна. Но тем не менее могу предложить такое решение:
(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)) ) |
Сообщ.
#4
,
|
|
|
tanya, действительно, задача до конца не ясна. Но тем не менее могу предложить такое решение:
(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)) ) |
Сообщ.
#5
,
|
|
|
В задании есть еще такая строчка, что список S имеет вид (a1 a2 a3...ak)
Это что-нибудь меняет? Я, честно говоря на эту строчку внимания не обратила... А писать нужно было, используя локальные или вспомогательные функции. |
Сообщ.
#6
,
|
|
|
(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)) |
Сообщ.
#7
,
|
|
|
tanya, погоди-ка. Я ведь так и сделал!!!!!!!!! Смотри внимательно!!!!!!!
|
Сообщ.
#8
,
|
|
|
Господи, спасибо тебе за то что на этом форуме есть такие умные люди, как Platonis!!!
|