;;; 3.3.scm ;;; 2024-08-31 ;;; $Id: 3.3.scm 1.1 2024/10/27 09:49:37 s Exp $ (use gauche.sequence) ; for 'map-with-index' procedure (define (main args) ; function (define sum (^(x) (fold + 0 x))) (define fix (^(x n) (/ (round (* x (expt 10 n))) (expt 10 n)))) ; input (define r 0.08) (define istart 90) (define iend 101) (define n (- iend istart)) (define a (list 90 91 92 93 94 95 96 97 98 99 100 101)) (define x (list 0 1e4 1e4 1e4 1e4 1e4 1e4 1e4 1e4 1e4 1e4 1e4)) (define p (list 0.07 0.08 0.09 0.1 0.1 0.1 0.1 0.1 0.1 0.07 0.05 0.04)) (define pp (list 1 0 0 0 0 0 0 0 0 0 0 0)) (define pv) (define sumofpv) ; calculating (define df (map-with-index (^(i _) (/ 1 (expt (+ 1 r) i))) a)) (do((i 1 (+ i 1))) ((= i (+ n 1)) i) (set! (ref pp i) (- (ref pp (- i 1)) (ref p (- i 1)) )) ) (set! pv (map (^(x y z) (* x y z)) pp x df)) (set! sumofpv (sum pv)) ; output (print "3.3.scm") (print "r " r) (print "istart " istart) (print "iend " iend) (print "n " n) (print "a " a) (print "x " (map (^x (x->integer x))x)) (print "p " p) (print "pp " (map (^x (fix x 2)) pp)) (print "df " (map (^x (fix x 2)) df)) (print "pv " (map (^x (x->integer x)) pv)) (print "sum of pv " (x->integer sumofpv)) 0) ;;; end