Paradygmaty programowania/Ćwiczenia 12: Programowanie funkcyjne w Haskellu III: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
==Zadanie 1== | ===Zadanie 1=== | ||
Napisać definicję leniwego operatora alternatywy na liczbach całkowitych, nie korzystając ze standardowego operatora ||. | Napisać definicję leniwego operatora alternatywy na liczbach całkowitych, nie korzystając ze standardowego operatora ||. | ||
Linia 14: | Linia 14: | ||
</div></div> | </div></div> | ||
==Zadanie 2== | ===Zadanie 2=== | ||
Zapisać za pomocą wyrażeń z kwalifikatorem listę trójek pitagorejskich (czyli liczb naturalnych <math>x, y</math>, z takich, że <math>x^2 + y^2 = z^2</math>) z ustalonego zakresu. Chodzi zatem o funkcję o sygnaturze: | Zapisać za pomocą wyrażeń z kwalifikatorem listę trójek pitagorejskich (czyli liczb naturalnych <math>x, y</math>, z takich, że <math>x^2 + y^2 = z^2</math>) z ustalonego zakresu. Chodzi zatem o funkcję o sygnaturze: | ||
Linia 35: | Linia 35: | ||
</div></div> | </div></div> | ||
==Zadanie 3== | ===Zadanie 3=== | ||
Jak zmienić program z poprzedniego zadania, by nie wypisywał niepotrzebnie podobnych trójek, np. (3, 4, 5) i (4, 3, 5)? | Jak zmienić program z poprzedniego zadania, by nie wypisywał niepotrzebnie podobnych trójek, np. (3, 4, 5) i (4, 3, 5)? | ||
Linia 44: | Linia 44: | ||
</div></div> | </div></div> | ||
==Zadanie 4== | ===Zadanie 4=== | ||
Napisać funkcję lsilnia, która dla danego <math>n \geq 1</math> wygeneruje listę silni liczb od 1 do <math>n</math>. Przykładowo, wywołanie lsilnia 4 ma dać listę [1, 2, 6, 24]. Jak zrobić to efektywnie? | Napisać funkcję lsilnia, która dla danego <math>n \geq 1</math> wygeneruje listę silni liczb od 1 do <math>n</math>. Przykładowo, wywołanie lsilnia 4 ma dać listę [1, 2, 6, 24]. Jak zrobić to efektywnie? | ||
Linia 54: | Linia 54: | ||
</div></div> | </div></div> | ||
==Zadanie 5*== | ===Zadanie 5*=== | ||
Zdefiniować operator >> za pomocą >>=. | Zdefiniować operator >> za pomocą >>=. | ||
Linia 63: | Linia 63: | ||
</div></div> | </div></div> | ||
==Zadanie 6== | ===Zadanie 6=== | ||
Co się stanie przy poniższych wywołaniach? Sprawdź... | Co się stanie przy poniższych wywołaniach? Sprawdź... | ||
Wersja z 13:29, 7 sie 2006
Zadanie 1
Napisać definicję leniwego operatora alternatywy na liczbach całkowitych, nie korzystając ze standardowego operatora ||.
Zadanie 2
Zapisać za pomocą wyrażeń z kwalifikatorem listę trójek pitagorejskich (czyli liczb naturalnych , z takich, że ) z ustalonego zakresu. Chodzi zatem o funkcję o sygnaturze:
trójkipit :: Integer -> [(Integer, Integer, Integer)]
Dla danego powinna ona stworzyć listę wszystkich trójek pitagorejskich, których elementy należą do przedziału .
Zadanie 3
Jak zmienić program z poprzedniego zadania, by nie wypisywał niepotrzebnie podobnych trójek, np. (3, 4, 5) i (4, 3, 5)?
Zadanie 4
Napisać funkcję lsilnia, która dla danego wygeneruje listę silni liczb od 1 do . Przykładowo, wywołanie lsilnia 4 ma dać listę [1, 2, 6, 24]. Jak zrobić to efektywnie?
Zadanie 5*
Zdefiniować operator >> za pomocą >>=.
Zadanie 6
Co się stanie przy poniższych wywołaniach? Sprawdź...
getChar >>= return return ’a’ >>= putChar