История изменений
Исправление 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))