Paradygmaty programowania/Ćwiczenia 12: Programowanie funkcyjne w Haskellu III: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Wkm (dyskusja | edycje)
Wkm (dyskusja | edycje)
Linia 41: Linia 41:
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none"> Wystarczy zmienić definicję funkcji trójki tak, by generowała tylko trójki spełniające warunek x ≤ y ≤ z. Można to zrobić tak:
<div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka:''' <div class="mw-collapsible-content" style="display:none"> Wystarczy zmienić definicję funkcji trójki tak, by generowała tylko trójki spełniające warunek x ≤ y ≤ z. Można to zrobić tak:


   ''trójki :: Integer -> [(Integer, Integer, Integer)]
   trójki :: Integer -> [(Integer, Integer, Integer)]
   trójki n = [(x,y,z) | x<-[1..n], y<-[x..n], z<-[y..n]]''
   trójki n = [(x,y,z) | x<-[1..n], y<-[x..n], z<-[y..n]]


</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?

Wersja z 22:45, 23 wrz 2006

Zadanie 1

Napisać definicję leniwego operatora alternatywy na liczbach całkowitych, nie korzystając ze standardowego operatora ||.

Wskazówka:

Zadanie 2

Zapisać za pomocą wyrażeń z kwalifikatorem listę trójek pitagorejskich (czyli liczb naturalnych x,y,z takich, że x2+y2=z2) z ustalonego zakresu. Chodzi zatem o funkcję o sygnaturze:

 trójkipit :: Integer -> [(Integer, Integer, Integer)]

Dla danego n powinna ona stworzyć listę wszystkich trójek pitagorejskich, których elementy należą do przedziału [1...n].

Wskazówka:

Zadanie 3

Jak zmienić program z poprzedniego zadania, by nie wypisywał niepotrzebnie podobnych trójek, np. (3, 4, 5) i (4, 3, 5)?

Wskazówka:

Zadanie 4

Napisać funkcję lsilnia, która dla danego n1 wygeneruje listę silni liczb od 1 do n. Przykładowo, wywołanie lsilnia 4 ma dać listę [1, 2, 6, 24]. Jak zrobić to efektywnie?

Wskazówka:

Zadanie 5*

Zdefiniować operator >> za pomocą >>=.

Wskazówka:

Zadanie 6

Co się stanie przy poniższych wywołaniach? Sprawdź...

 getChar >>= return
 return ’a’ >>= putChar
Wskazówka: