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