Języki symboliczne, laboratorium 02 Zadanie 1. Napisz funkcję

Transkrypt

Języki symboliczne, laboratorium 02 Zadanie 1. Napisz funkcję
Języki symboliczne, laboratorium 02
Zadanie 1. Napisz funkcję przyjmującą rok (liczbę całkowitą) jako argument, zwracającą #t jeśli
podany rok jest przestępny, #f w przeciwnym razie. Rok jest przestępny, jeśli jest podzielny przez 4,
o ile nie jest podzielny przez 100, lub jest podzielny przez 400. Wykorzystaj if, and, or lub not.
Zadanie 2. Napisz funkcję liczącą pierwiastek kwadratowy metodą Newtona.
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.7
Zadanie 3. Zmodyfikuj funkcję z zadania 2., wstawiając definicje wszystkich funkcji
pomocniczych do funkcji liczącej pierwiastek.
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.8
Zadanie 4. Funkcje zdefiniowane w ciele innej funkcji mają dostęp do zmiennych tej funkcji.
Wiedząc to, zmodyfikuj funkcję z zadania 3., usuwając zbędne argumenty z funkcji
zagnieżdżonych.
Zadanie 5. Wykorzystując wiedzę zdobytą w trakcie wykonywania zadań 2-4, napisz funkcję
liczącą pierwiastek trzeciego stopnia metodą Newtona. Wstaw komentarz wieloliniowy opisujący
zasadę działania funkcji przed jej definicją, oraz komentarze jednoliniowe opisujące każdą z funkcji
pomocniczych.
https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_thm_1.8
Zadanie 6. Napisz funkcję liczącą największy wspólny dzielnik dwóch liczb całkowitych.
Zadanie 7. Napisz funkcję f przyjmującą dwa argumenty n oraz k, liczącą wartość funkcji danej
wzorem:
k
n=0
f (n , k )=
k +1
n=1
f (n 1, k ) f ( n 2, k ) n>1
Wykorzystaj cond.
{
Zadanie specjalne. Napisz funkcję wypisującą pasek postępu. Funkcja jako argument powinna
przyjmować długość paska. Wykorzystaj rekurencję oraz konstrukcję begin.
Przykład:
> (progress 8)
[
]
[|
]
[||
]
[|||
]
[||||
]
[|||||
]
[|||||| ]
[||||||| ]
[||||||||]
Zadanie dodatkowe. Przeanalizuj kolejność wypisywania tekstu na ekran:
(define (d i) (display i) #t)
(and (d 1) (d 2) (d 3))
(or (d 1) (d 2) (d 3))
(define (g a b) (display "@"))
(g (d 1) (d 2))