;;; 3.10.scm ;;; 2024-08-31 ;;; $Id: 3.10.scm 1.1 2024/11/01 12:35:24 s Exp $ (define (main args) ; procedure (define sum (^x (fold + 0 x))) (define (fix x n) (/ (round (* x (expt 10 n))) (expt 10 n))) ; input (define la 0.1) ; 利回り (define n 10) ; 期間(年) (define r 0.08) ; クーポン率 (define m 2) ; クーポン支払回数(回/年) (define face 100) ; 額面価値 (define j (list 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)) ; calculation (define co (/ (* face r) m)) (define year (map (^(x) (/ x m)) j)) (define payment (list 0 co co co co co co co co co co co co co co co co co co co (+ co face))) (define df (map (^(x) (/ (expt (+ 1 (/ la m)) x ))) j)) (define pv (map (^(x y) (* x y)) payment df)) (define price (sum pv)) (define weight (map (^(x) (/ x price)) pv)) (define yw (map (^(x y) (* x y)) year weight)) (define duration (sum yw)) ; output (print "3.10.scm") (print "lambda= " la) (print "n= " n) (print "r= " r) (print "m= " m) (print "face= " face) (print "co= " co) (format #t "~8@a~8@a~8@a~8@a~8@a~8@a\n" "year" "payment" "df" "pv" "weight" "y*w") (print "--------------------------------------------------------") (for-each (lambda (x1 x2 x3 x4 x5 x6) (format #t "~8,1f~8,0f~8,3f~8,3f~8,3f~8,3f\n" x1 x2 x3 x4 x5 x6)) year payment df pv weight yw) (print "--------------------------------------------------------") (format #t "~8@a~24,3f~16,3f\n" "total" price duration) (format #t "~32@a~16@a\n" "price" "duration") 0) ;;; end