> 1 <

Автор Сообщение

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5600   2012-01-27 18:39 GMT+3 часа(ов)      
о великие Лисперы!!!
суть задания..Подсчитать сумму ряда Фибоначчи.
есть код:
(defun fib(n)
(cond ((< n 2) 1)
(else (+ (fib (- n 1) (- n 2))))))
но при запуске выдает все время 1..в чем проблема не понимаю.Должно быть так: (fib 2) ==> 2 ; (fib 5) ==> 12 и т.д.

bokunopico

Members


Статус

54 сообщений

Где: Russia Нижний Новгород
Род занятий:
Возраст:

#5601   2012-01-27 19:21 GMT+3 часа(ов)      
(defun fib-sum (n)
(labels ((fib (n) (cond ((or (= n 1) (= n 2)) 1)
(t (+ (fib (- n 1)) (fib (- n 2)))))))
(loop for i from 1 to n sum (fib i))))
 
CL-USER> (fib-sum 2)
2
CL-USER> (fib-sum 5)
12

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#5602   2012-01-27 19:26 GMT+3 часа(ов)      
Извините

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5604   2012-01-27 19:42 GMT+3 часа(ов)      
у меня программа ругается на fib-sum...может дело все в том что я запускаю все на MULISP.COM??!!

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5605   2012-01-27 19:45 GMT+3 часа(ов)      
щас еще раз попробовал и начала ругаться на
(labels ((fib (n) (cond ((or (= n 1) (= n 2)) 1)
 
(t (+ (fib (- n 1)) (fib (- n 2)))))))

пошет что какая-то ошибка функции...

bokunopico

Members


Статус

54 сообщений

Где: Russia Нижний Новгород
Род занятий:
Возраст:

#5606   2012-01-27 19:48 GMT+3 часа(ов)      
> может дело все в том что я запускаю все на MULISP.COM??!!
Да, это причина, имплементацию CL желательно сразу указывать.
> у меня программа ругается на fib-sum
Ругается не на функцию, а на языковую конструкцию в ней. Наверное, не понимает макрос loop. Хотя, может, и labels там нет, не знаю, не имел дело с muLISP.

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5607   2012-01-27 19:56 GMT+3 часа(ов)      
Да вы правы тут нет labels.Но все равно спасибо что откликнулись!!!

bokunopico

Members


Статус

54 сообщений

Где: Russia Нижний Новгород
Род занятий:
Возраст:

#5608   2012-01-27 20:04 GMT+3 часа(ов)      
Ну, а если вынести локальную рекурсивную функцию?
(defun fib (n)
(cond ((or (= n 1) (= n 2)) 1)
(t (+ (fib (- n 1)) (fib (- n 2))))))
 
(defun fib-sum (n)
(cond ((= n 0) 0)
(t (+ (fib n) (fib-sum (- n 1))))))

А макрос do есть?

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5609   2012-01-27 20:09 GMT+3 часа(ов)      
Вы правы так все работает спасибо,можете еще объяснить что я делал не так?

bokunopico

Members


Статус

54 сообщений

Где: Russia Нижний Новгород
Род занятий:
Возраст:

#5610   2012-01-27 20:13 GMT+3 часа(ов)      
> можете еще объяснить что я делал не так?
Давай на ты. Ты высчитывал n-ный член ряда Фибоначчи, судя по выложенному коду. Но невнимательность к скобкам:
(+ (fib (- n 1) (- n 2))) ; функция fib вызывается с двумя аргументами вместо одного

привела к тому, что на выходе всегда получалась 1.

akadem

Members


Статус

10 сообщений

Где: Russia
Род занятий: студент
Возраст: 29

#5611   2012-01-27 20:37 GMT+3 часа(ов)      
Спасибо))

joba

Members


Статус

157 сообщений

Где: ---
Род занятий:
Возраст:

#5612   2012-01-28 00:08 GMT+3 часа(ов)      
>Подсчитать сумму ряда Фибоначчи.
(defun binet (n fi) 
(/ (- (expt fi n) (expt (- fi) (- n))) (- (* 2 fi) 1)))
(defun fi () (/ (+ 1 (expt 5 .5)) 2.))
(defun binet-fib (n) (binet n (fi)))
> 1 <


Онлайн :

0 пользователь(ей), 35 гость(ей) :




Реклама на сайте: