LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

Попробуй так. Проверь только на корректность, вдруг я что-то потерял. В твоем варианте со списком, кстати, отбрасывался первый полином. println лучше не использовать, он поддерживается только в racket scheme, вместо него лучше брать display. Полагаю, для текущего задания это неважно, но chez scheme и guile scheme значительно быстрее racket scheme.

#lang scheme

(define (Pn x n)
  (cond ((= n 0) 1)
        ((= n 1) x)
        (else (let* ((Pn-1 (Pn x (- n 1)))
                     (Pn-2 (Pn x (- n 2)))
                     (a (* (- (* 2 n) 1) x Pn-1))
                     (b (* (- n 1) Pn-2)))
                     (/ (- a b) n)))))

(define (iterate-while f c i)
  (if (c i)
      (list i)
      (cons i (iterate-while f c (f i)))))

(define (legendre n)
  (map (lambda (i) (exact->inexact (Pn i n)))
       (iterate-while (lambda (i) (+ i #e0.1)) (lambda (i) (= i #e1)) #e-1)))
(display (legendre 2))

Исходная версия Siborgium, :

Попробуй так. Проверь только на корректность, вдруг я что-то потерял. В твоем варианте со списком, кстати, отбрасывался первый полином. println лучше не использовать, он поддерживается только в racket scheme, вместо него лучше брать display.

#lang scheme

(define (Pn x n)
  (cond ((= n 0) 1)
        ((= n 1) x)
        (else (let* ((Pn-1 (Pn x (- n 1)))
                     (Pn-2 (Pn x (- n 2)))
                     (a (* (- (* 2 n) 1) x Pn-1))
                     (b (* (- n 1) Pn-2)))
                     (/ (- a b) n)))))

(define (iterate-while f c i)
  (if (c i)
      (list i)
      (cons i (iterate-while f c (f i)))))

(define (legendre n)
  (map (lambda (i) (exact->inexact (Pn i n)))
       (iterate-while (lambda (i) (+ i #e0.1)) (lambda (i) (= i #e1)) #e-1)))
(display (legendre 2))