Symbolické programovanie a LISP,
zima 2000/2001
(vychádza z prednášky
Funkcionálne programovanie, Ivan Kalaš)
Petrovič Pavol, Ústav Informatiky, č.d. 15
e-mail: ppetrovi@dent.ii.fmph.uniba.sk
www k prednáške: http://www.ii.fmph.uniba.sk/vyuka/lisp
6.cvičenie
- Banka
- Zadefinujte funkciu create-account-with-password,
ktorá vznikne modifikáciou - pridaním hesiel
do funkcie create-account3 zo
6.prednášky. Takto vytvorené konto
nevykoná žiadnu operáciu, pokiaľ nedostane
správne heslo.
Príklad:
[] (define my-account
(create-account-with-password 1000 'ostrich))
-> my-account
[] ((my-account 'withdraw 'penguin) 1000) ->
Wrong password!
[] ((my-account 'deposit 'ostrich) 100) ->
1100
(define (create-account-with password init) ...
-
- Zadefinujte unárnu funkciu generate-semaphore,
ktorá generuje semafóry, t.j. nulárne funkcie
striedavo vracajúce čísla 0 a 1. Init
je počiatočný stav semafóru.
(define (generate-semaphore init) ...
- Zadefinujte unárnu funkciu generate-accumulator,
ktorá generuje akumulátory, t.j. unárne
funkcie s počítadlom (na začiatku nastaveným na
init). Pri každom volaní
akumulátoru sa argument pripočíta k počítadlu,
a vráti sa nová hodnota počítadla.
(define (generate-accumulator init) ...
- Zadefinujte unárnu funkciu generate-monitor1,
ktorá generuje monitory unárnych funkcií (f).
Monitor funkcie je funkcia vracajúca rovnaký
výsledok ako funkcia, ktorú monitoruje, pokiaľ
na vstupe nie je špeciálna správa how-many
(resp. zero). V takom prípade
monitor vráti počet aplikácií (resp. vynuluje
počítadlo).
Príklad:
[] (define 1+~ (generate-monitor1 1+)) -> 1+~
[] (1+~ 5) -> 6
[] (1+~ 'how-many) -> 1
(define (generate-monitor1 f) ...
- Zadefinujte unárnu funkciu generate-monitor2,
ktorá sa správa rovnako ako funkcia generate-monitor1
z predchádzajúceho cvičenia. Využite
funkciu generate-accumulator.
(define (generate-monitor2 f) ...
- Zadefinujte unárnu funkciu generate-monitor3,
ktorá sa správa rovnako ako funkcia generate-monitor2
z predchádzajúceho cvičenia s touto výnimkou.
Ak je volanie monitorovanej funkcie
neúspešné, t.j. výsledkom je hodnota nil,
tak také volanie sa nezaráta.
(define (generate-monitor3 f) ...
- Zadefinujte unárnu funkciu generate-monitor4,
ktorá sa správa rovnako ako funkcia generate-monitor3
z predchádzajúceho cvičenia. Funkcia generate-monitor4
však už dokáže generovať monitory
funkcií s ľubovoľným počtom argumentov.
Pomôcka: nasledujúca funkcia fix-2-float
má dva pevné argumenty (arg1 a
arg2), zvyšné argumenty
sú uchované v zozname args.
(define (fix-2-float arg1 arg2 . args) (cons arg1
(cons arg2 args)))
(define (generate-monitor4 f) ...
Last Updated on 09-Nov-2000
By Petrovic Pavol
E-mail: ppetrovi@dent.ii.fmph.uniba.sk