Formal power series: Difference between revisions
Content added Content deleted
m (→{{header|Perl 6}}: Make FPS a role.) |
|||
Line 1,455: | Line 1,455: | ||
[1, Fraction(0, 1), Fraction(-1, 2), Fraction(0, 1), Fraction(1, 24), Fraction(0, 1), Fraction(-1, 720), Fraction(0, 1), Fraction(1, 40320), Fraction(0, 1)] |
[1, Fraction(0, 1), Fraction(-1, 2), Fraction(0, 1), Fraction(1, 24), Fraction(0, 1), Fraction(-1, 720), Fraction(0, 1), Fraction(1, 40320), Fraction(0, 1)] |
||
</pre> |
</pre> |
||
=={{header|Racket}}== |
|||
Using '''Lasy Racket''': |
|||
<lang racket> |
|||
#lang lazy |
|||
(require racket/match) |
|||
;; element-wise addition and subtraction |
|||
(define (<+> s1 s2) (map + s1 s2)) |
|||
(define (<-> s1 s2) (map - s1 s2)) |
|||
;; element-wise scaling |
|||
(define (scale a s) (map (λ (x) (* a x)) s)) |
|||
;; series multiplication |
|||
(define (<*> fs gs) |
|||
(match-let ([(cons f ft) (! fs)] |
|||
[(cons g gt) (! gs)]) |
|||
(cons (* f g) (<+> (scale f gt) (<*> ft gs))))) |
|||
;; series division |
|||
(define (</> fs gs) |
|||
(match-letrec ([(cons f ft) (! fs)] |
|||
[(cons g gt) (! gs)] |
|||
[qs (cons (/ f g) (scale (/ g) (<-> ft (<*> qs gt))))]) |
|||
qs)) |
|||
;; integration and differentiation |
|||
(define (int f) (map / f (enum 1))) |
|||
(define (diff f) (map * (cdr f) (enum 1))) |
|||
;; series of natural numbers greater then n |
|||
(define (enum n) (cons n (enum (+ 1 n )))) |
|||
</lang> |
|||
Examples: |
|||
<lang racket> |
|||
(define <sin> (cons 0 (int <cos>))) |
|||
(define <cos> (cons 1 (scale -1 (int <sin>)))) |
|||
-> (!! (take 10 <sin>)) |
|||
'(0 1 0 -1/6 0 1/120 0 -1/5040 0 1/362880) |
|||
-> (!! (take 10 <cos>)) |
|||
'(1 0 -1/2 0 1/24 0 -1/720 0 1/40320 0) |
|||
-> (!! (take 10 (diff <sin>))) |
|||
'(1 0 -1/2 0 1/24 0 -1/720 0 1/40320 0) |
|||
; sin(x)² + cos(x)² = 1 |
|||
-> (!! (take 10 (<+> (<*> <cos> <cos>) (<*> <sin> <sin>)))) |
|||
'(1 0 0 0 0 0 0 0 0 0) |
|||
; series of (tan x) |
|||
-> (!! (take 10 (</> <sin> <cos>))) |
|||
'(0 1 0 1/3 0 2/15 0 17/315 0 62/2835) |
|||
</lang> |
|||
=={{header|Scheme}}== |
=={{header|Scheme}}== |