A következő függvény segít karbantartani
egy bankszámla egyenlegét. Kírja a kiindulási
egyenleget, azután egy ciklusba lép, ami bekér egy
számot a felhasználótól, kivonja az
aktuális egyenlegből. A betétek negatív
számmal adhatók meg. Ha nullat kap inputként,
kiírja az egyenleget, és terminál.
(define checkbook (lambda ()
; Ez az egyenlegkarbantartó program a Scheme-beli I/O demonstrálására
; készült. A Scheme tisztán funkcionális részét használja.
; Lokális definícók
(letrec
; Ezeket fogjuk promptként használni
((IB "írja be a kiinduló egyenleget: ")
(AT "írja be a vérehajtandó tranzakciót: ")
(FB "A záróegyenleg: ")
; Ez a függvény megjeleníti a promptot és visszaad egy
; beolvasott értéket
(prompt-read (lambda (Prompt)
(display Prompt)
(read)))
; Ez a függvény kiszámítja az új egyenleget
; a kiinduló egyenlegből (Init) és a t tranzakciób1l
; Ha a t 0, terminál, különben rekurzívan meghívja
; önmagát.
(newbal (lambda (Init t)
(if (= t 0)
(list FB Init)
(transaction (+ Init t)))))
; Ez a függvény kiírja a promptot és beolvassa a
; következő tranzakciót, és ennek értékét
; átadja a newbal-nak.
(transaction (lambda (Init)
(newbal Init (prompt-read AT)))))
; Ez a checkbook törzse. Bekéri a kiinduló egyenleget.
(transaction (prompt-read IB)))))