Создание списка чисел Фибоначчи в схеме? - PullRequest
3 голосов
/ 07 марта 2012

Я создал базовую программу, которая выводит последовательность Фибоначчи для любой длины "n". Вот код, который у меня есть:

(define (fibh n)
  (if (< n 2)
      n
      (+ (fibh (- n 1)) (fibh (- n 2)))))

(define (fib n)
  (do ((i 1 (+ i 1)))
      ((> i n))
    (display (fibh i))))

Выводит, например, 112358.

Мне нужен список типа (1 1 2 3 5 8).

Любое объяснение, как это сделать, будет с благодарностью.

Ответы [ 2 ]

6 голосов
/ 07 марта 2012
(map fibh '(1 2 3 4 5 6))

сделает свое дело.Если вы не хотите перечислять целые числа вручную, то реализуйте простую рекурсивную функцию, которая сделает это за вас, например:

(define (count i n)
  (if (= i n)
    '()
    (cons i (count (+ i 1) n))))

(Примечание: это не хвостовая рекурсия, но с этималгоритм вычисления чисел Фибоначчи, это не ваша главная задача.)

2 голосов
/ 08 марта 2012
Petite Chez Scheme Version 8.3
Copyright (c) 1985-2011 Cadence Research Systems

> (define (fib n)
    (let loop ((n n) (f2 1) (f1 1) (fs (list)))
      (if (zero? n) (reverse fs)
        (loop (- n 1) f1 (+ f2 f1) (cons f2 fs)))))
> (fib 50)
(1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584
 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811
 514229 832040 1346269 2178309 3524578 5702887 9227465
 14930352 24157817 39088169 63245986 102334155 165580141
 267914296 433494437 701408733 1134903170 1836311903
 2971215073 4807526976 7778742049 12586269025)
...