Scheme Executable Terminating Prematurely

Discussion of Scheme and Racket
Post Reply
ec44
Posts: 2
Joined: Wed Apr 01, 2015 5:23 pm

Scheme Executable Terminating Prematurely

Post by ec44 » Wed Apr 01, 2015 5:41 pm

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"))

sylwester
Posts: 133
Joined: Mon Jul 11, 2011 2:53 pm

Re: Scheme Executable Terminating Prematurely

Post by sylwester » Thu Apr 09, 2015 6:52 pm

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:
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)
Which is OK since after this you are defining procedures but you never call any of them enywhere.
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

ec44
Posts: 2
Joined: Wed Apr 01, 2015 5:23 pm

Re: Scheme Executable Terminating Prematurely

Post by ec44 » Sun Apr 12, 2015 5:36 pm

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.

Goheeca
Posts: 271
Joined: Thu May 10, 2012 12:54 pm
Contact:

Re: Scheme Executable Terminating Prematurely

Post by Goheeca » Thu Apr 30, 2015 11:39 am

In docs they say:
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.
Therefore, you have to write your own REPL or use the built-in one.
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.

Post Reply