「利率、毎月の貯金などを考慮した銀行口座」を作りました。 利率と貯金を入れられるので(むちゃくちゃ)生涯賃金計算や人生設計の おともにどうぞ。(~_~; (プログラム本体) ;;; The definition of 'table' (課題6-8) (define (make-table) (cons '() '())) (define (assoc key records) (cond ((null? records) #f) ((equal? key (caar records)) (car records)) (else (assoc key (cdr records))))) (define (lookup-table key dataname) (let ((record (assoc key (cdr dataname)))) (if record (cdr record) "no data"))) (define (insert-table! key value dataname) (let ((record (assoc key (cdr dataname)))) (if record (set-cdr! record value) (set-cdr! dataname (cons (cons key value) (cdr dataname)))))) ;;; The definition of 'record' (写し) (define (make-record label-and-values) (let ((r (make-table))) (define (iter! pairs) (if (not (null? pairs)) (let ((label (car pairs)) (value (cadr pairs))) (insert-table! label value r) (iter! (cddr pairs))))) (iter! label-and-values) r)) (define (record-ref record label) (lookup-table label record)) (define (record-set! record label value) (insert-table! label value record)) ;;; The definition of 'balance calculation' (define (make-account bal inc int) (make-record (list 'balance bal 'income inc 'interest int))) (define (account-balance A) (record-ref A 'balance)) (define (account-income A) (record-ref A 'income)) (define (account-interest A) (record-ref A 'interest)) (define (account-calc! A time) (let ((bal (account-balance A)) (inc (account-income A)) (int (account-interest A))) (record-set! A 'balance (settle time)))) (define (account-deposit! A amount) (record-set! A 'balance (+ (account-balance A) amount))) (define (account-set-income! A inc) (record-set! A 'income inc)) (define (account-set-interest! A int) (record-set! A 'interest int)) (define (settle t) (if (= t 0) bal (* int (+ inc (f (- t 1)))))) ;;;今月の貯金を足した後、利率をかける。 ;;; 使い方 ;;; (make-account bal inc int)---残高、毎単位時間の貯金額(消費はマイナス)、利 ;;; 率が設定された口座を作る ;;; (account-*** A)---口座Aの現在の***の値を呼び出す。 ;;; (account-calc! A time)---口座Aを何単位時間後かの状態にする ;;; (account-deposit! A amount)---臨時収支(収入:+、支出:ー) ;;; (account-set-***! A ###)---口座Aの***の値を###に変更する (おわり) 使用例 (1)最初1万円預け、毎年100円貯金して、利率は1% > (define acc (make-account 10000 100 1.01)) # > (account-balance acc) 10000 > (account-income acc) 100 > (account-interest acc) 1.01 > (account-calc! acc 2) (2年後) # > (account-balance acc) 10.40401e3 (2)ボーナス100万円を10年で2倍になる御時世の時に 預け、100年後にタイムマシンで取りに行く場合 > (define acc2 (make-account 1000000 0 2)) # > (account-calc! acc2 2) # > (account-balance acc2) 12.102904720765e3 1024倍にならないといけないのですが変数が中で変わっていないようです。 今日は時間がないので直せませんでした。 (source code) /home/~c71211/Enshu/final.scm