Programowanie funkcyjne/Podstawy/Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Przemek (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
==Ćwiczenia==
==Ćwiczenia==
   
   
* Forma specjalna <tt>let-in</tt> jest tylko lukrem syntaktycznym i może być rozwinięta do <math>\lambda</math>-abstrakcji. W jaki sposób?
* Forma specjalna <tt>let-in</tt> jest tylko lukrem syntaktycznym i może być rozwinięta do <math>\lambda </math>-abstrakcji. W jaki sposób?
* Udowodnij, że dla każdego naturalnego <math>n</math> zachodzi <math>\texttt{fib}\ n = \mbox{Fib}_n</math>. Podaj specyfikację dla <tt>fibpom</tt> i udowodnij ją przez indukcję.  
* Udowodnij, że dla każdego naturalnego <math>n</math> zachodzi <math> \texttt{fib}\ n = \mbox{Fib}_n</math>. Podaj specyfikację dla <tt>fibpom</tt> i udowodnij ją przez indukcję.  


  '''let''' fib n =
  '''let''' fib n =
Linia 13: Linia 13:
Uruchamianie Ocamla. Proste programiki operujące liczbami całkowitymi (bez rekurencji ogonowej i list):
Uruchamianie Ocamla. Proste programiki operujące liczbami całkowitymi (bez rekurencji ogonowej i list):


* Stopień parzystości liczby całkowitej <math>x</math>, to największa taka liczba naturalna <math>i</math>, że <math>x</math> dzieli się przez 2<sup>i</sup>. Liczby nieparzyste mają stopień parzystości 0, liczby 2 i -6 mają stopień parzystości 1, a liczby 4 i 12 mają stopień parzystości 2. Przyjmujemy, że 0 ma stopień parzystości -1.  
* Stopień parzystości liczby całkowitej <math> x</math>, to największa taka liczba naturalna <math> i</math>, że <math>x</math> dzieli się przez 2<sup>i</sup>. Liczby nieparzyste mają stopień parzystości 0, liczby 2 i -6 mają stopień parzystości 1, a liczby 4 i 12 mają stopień parzystości 2. Przyjmujemy, że 0 ma stopień parzystości -1.  


Napisz procedurę <tt>parzystość</tt> wyznaczającą stopień parzystości danej liczby całkowitej.
Napisz procedurę <tt>parzystość</tt> wyznaczającą stopień parzystości danej liczby całkowitej.
Linia 19: Linia 19:
* sprawdź, czy liczba jest pierwsza,
* sprawdź, czy liczba jest pierwsza,
* sprawdzenie podzielności przez 9 metodą sumowania cyfr: liczba -> suma cyfr, powtarzać aż do uzyskania liczby jednocyfrowej,
* sprawdzenie podzielności przez 9 metodą sumowania cyfr: liczba -> suma cyfr, powtarzać aż do uzyskania liczby jednocyfrowej,
* odwrócić liczbę (<math>1234 \to 4321</math>),
* odwrócić liczbę (<math> 1234 \to 4321</math>),
* sprawdzenie, czy liczba dzieli się przez 11: sumujemy cyfry liczby znajdujące się na parzystych pozycjach, oraz te na nieparzystych pozycjach, różnica tych dwóch reszt przystaje modulo 11 do wyjściowej liczby; powtarzać aż do uzyskania liczby jednocyfrowej,  
* sprawdzenie, czy liczba dzieli się przez 11: sumujemy cyfry liczby znajdujące się na parzystych pozycjach, oraz te na nieparzystych pozycjach, różnica tych dwóch reszt przystaje modulo 11 do wyjściowej liczby; powtarzać aż do uzyskania liczby jednocyfrowej,  
* kodowanie par liczb całkowitych jako liczby całkowite.
* kodowanie par liczb całkowitych jako liczby całkowite.

Wersja z 09:08, 27 lip 2006

Ćwiczenia

  • Forma specjalna let-in jest tylko lukrem syntaktycznym i może być rozwinięta do λ-abstrakcji. W jaki sposób?
  • Udowodnij, że dla każdego naturalnego n zachodzi fib n=Fibn. Podaj specyfikację dla fibpom i udowodnij ją przez indukcję.
let fib n =
  let rec fibpom a b n = 
    if n = 0 then a else fibpom b (a + b) (n - 1)
  in 
    fibpom 0 1 n;;

Laboratorium

Uruchamianie Ocamla. Proste programiki operujące liczbami całkowitymi (bez rekurencji ogonowej i list):

  • Stopień parzystości liczby całkowitej x, to największa taka liczba naturalna i, że x dzieli się przez 2i. Liczby nieparzyste mają stopień parzystości 0, liczby 2 i -6 mają stopień parzystości 1, a liczby 4 i 12 mają stopień parzystości 2. Przyjmujemy, że 0 ma stopień parzystości -1.

Napisz procedurę parzystość wyznaczającą stopień parzystości danej liczby całkowitej.

  • sprawdź, czy liczba jest pierwsza,
  • sprawdzenie podzielności przez 9 metodą sumowania cyfr: liczba -> suma cyfr, powtarzać aż do uzyskania liczby jednocyfrowej,
  • odwrócić liczbę (12344321),
  • sprawdzenie, czy liczba dzieli się przez 11: sumujemy cyfry liczby znajdujące się na parzystych pozycjach, oraz te na nieparzystych pozycjach, różnica tych dwóch reszt przystaje modulo 11 do wyjściowej liczby; powtarzać aż do uzyskania liczby jednocyfrowej,
  • kodowanie par liczb całkowitych jako liczby całkowite.