The following program is my first scheme program that I designed to calculate the values of the variables in the compound interest formula and the compounded continuously formula. I used DrRacket to create an executable, but when I run it in Terminal (Mac), it ends after only the introduction (the part that displays the syntax) and doesn't allow the user to actually use the defined functions. How can I allow the executable to continue and allow the user to actually use the functions without simply stopping after the introduction?
#lang scheme
;INTRODUCTION
(display " a = balance, p = principle, r = rate,")
(newline)
(display " m = compounding periods, t = time")
(newline)
(newline)
(display "Compound Interest Formula:")
(newline)
(display "(solve-for-balance p r m t)")
(newline)
(display "(solve-for-principle a r m t)")
(newline)
(display "(solve-for-rate p a m t)")
(newline)
(display "(solve-for-time p a r m)")
(newline)
(display "(solve-for-principle a r m t)")
(newline)
(newline)
(display "Interest Compounded Continuously:")
(newline)
(display "(solve-for-balance-cont p r t)")
(newline)
(display "(solve-for-principle-cont a r t)")
(newline)
(display "(solve-for-rate-cont p a t)")
(newline)
(display "(solve-for-time-cont p a r)")
;COMPOUNDED INTEREST FORMULA
;Solve for Balance
(define (solve-for-balance p r m t)
(define part1
(+ 1 (/ r m)))
(define part2
(expt part1 (* m t)))
(display "$ ")
(display (* part2 p)))
;Solve for Principle
(define (solve-for-principle a r m t)
(define part1
(+ 1 (/ r m)))
(define part2
(expt part1 (* m t)))
(display "$ ")
(/ a part2))
;Solve for Rate
(define (solve-for-rate p a m t)
(define part1
(expt (/ a p) (/ 1 (* m t))))
(display (* 100 (* m (- part1 1))))
(display " %"))
;Solve for Time
(define (solve-for-time p a r m)
(define part1
(log (expt (/ a p) (/ 1 m))))
(define part2
(log (+ 1 (/ r m))))
(display (/ part1 part2))
(display " years"))
;INTEREST FORMULA COMPOUNDED CONTINUOUSLY
;Defining Euler's Number (e)
(define e 2.7182818284590452353602874713527)
;Solve for Balance (Compounded Continuously)
(define (solve-for-balance-cont p r t)
(display "$ ")
(expt (* p e) (* r t)))
;Solve for Principle (Compounded Continuously)
(define (solve-for-principle-cont a r t)
(display "$ ")
(/ a (expt e (* r t))))
;Solve for Rate (Compounded Continuously)
(define (solve-for-rate-cont p a t)
(display (*(/ (log (/ a p)) t) 100))
(display " %"))
;Solve for Time (Compounded Continuously)
(define (solve-for-time-cont p a r)
(display (/ (log (/ a p)) r))
(display " years"))
Scheme Executable Terminating Prematurely
Re: Scheme Executable Terminating Prematurely
DrRacket is a implementation that supports several languages. It's main language is #lang racket or #!racket for short and it is not Scheme.
If you wanrt Scheme as in a standard language you need to use #!r5rs or #r6rs
#lang scheme was the same as #!racket, thus not Scheme at all, and it's deprecated. It might suddenly stop working.
When yo press Run in DrRacket IDE, does it stop at the same part? I get this output:
It's like buying a really good coffe mug and have it in your kicthen without trying to put any coffe in it or drink from it.
Using *display** in every procedure is not good practice. If you want the result displayed it's better to display the result. eg. *(display (solve-for-balance 10 2 3 8))*
If you wanrt Scheme as in a standard language you need to use #!r5rs or #r6rs
#lang scheme was the same as #!racket, thus not Scheme at all, and it's deprecated. It might suddenly stop working.
When yo press Run in DrRacket IDE, does it stop at the same part? I get this output:
Which is OK since after this you are defining procedures but you never call any of them enywhere.a = balance, p = principle, r = rate,
m = compounding periods, t = time
Compound Interest Formula:
(solve-for-balance p r m t)
(solve-for-principle a r m t)
(solve-for-rate p a m t)
(solve-for-time p a r m)
(solve-for-principle a r m t)
Interest Compounded Continuously:
(solve-for-balance-cont p r t)
(solve-for-principle-cont a r t)
(solve-for-rate-cont p a t)
(solve-for-time-cont p a r)
It's like buying a really good coffe mug and have it in your kicthen without trying to put any coffe in it or drink from it.
Using *display** in every procedure is not good practice. If you want the result displayed it's better to display the result. eg. *(display (solve-for-balance 10 2 3 8))*
I'm the author of two useless languages that uses BF as target machine.
Currently I'm planning a Scheme compiler :p
Currently I'm planning a Scheme compiler :p
Re: Scheme Executable Terminating Prematurely
My goal with this program is to define functions that solve for each variable and then allow the user to use these functions as an interest formula calculator. When I run the program in DrRacket, I can use the functions with custom inputs after the the program displays the syntax. However, when I create an executable using DrRacket, the program terminates after displaying the syntax. Thus, the user is unable to use the functions that the program defines. In other words, I want the user to be able to use the executable as an interest formula calculator using the syntax defined/displayed in the introduction. The reason that I did not call any of the functions is because I want the user to be able to supply the inputs.
Re: Scheme Executable Terminating Prematurely
In docs they say:
Therefore, you have to write your own REPL or use the built-in one.The executable you create will not have a read-eval-print-loop, so be sure to have an expression that starts your program running in the definitions window before creating the executable.
cl-2dsyntax is my attempt to create a Python-like reader. My mirror of CLHS (and the dark themed version). Temporary mirrors of aferomentioned: CLHS and a dark version.