Programowanie funkcyjne/Procedury jeszcze wyższych rzędów/Ćwiczenia
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Ćwiczenia
- Dla dowolnych dwóch funkcji i istnieje dokładnie jedna taka funkcja , że i (gdzie i to rzuty na pierwszą i drugą współrzędną). Zdefiniuj wprost procedurę prod, która na podstawie funkcji i wyznacza funkcję dla proceduralnej definicji produktów.
- Jak można rozszerzyć liczby naturalne Churcha do liczb całkowitych?
- Zaimplementuj sumy rozłączne (koprodukty) za pomocą procedur. (Koprodukt zbiorów i to taki zbiór wraz z włożeniami , , że dla dowolnej pary funkcji i istnieje dokładnie jedna taka funkcja , że i . Potraktuj tę definicję dosłownie.) Należy zaimplementować włożenie i w oraz procedurę, która na podstawie funkcji i wyznaczy funkcję .
- Potęgowanie funkcji w czasie logarytmicznym. Co tak na prawdę jest obliczane szybciej: funkcja wynikowa, czy jej wartość?
- Jak za pomocą operatora punktu stałego można wyznaczać procedury wzajemnie rekurencyjne?
- Zadanie o Origami. Dana jest lista prostych zorientowanych wyznaczająca ciąg złożeń papieru. Kartka papieru to kwadrat jednostkowy. Każda prosta jest reprezentowana przez parę różnych punktów. Punkt to para współrzędnych i . Papier jest składany w ten sposób, że z prawej strony prostej (patrząc w kierunku od pierwszego punktu do drugiego) jest przekładany na lewą. Napisz procedurę origami, która dla wywołania origami l p oblicza ile warstw papieru znajdzie się w punkcie p po złożeniu papieru zgodnie z prostymi z listy l (Przyjmujemy, że na linii złożenia są obie składane warstwy papieru.) [Jest to bardzo ładne zadanie. Należy tu wykorzystać procedury jako strukturę danych reprezentującą stan kartki.]