Advertisement
Guest User

Untitled

a guest
May 11th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.58 KB | None | 0 0
  1. #lang racket
  2. ; rekurencja ogonowa
  3.  
  4. (define (suma2 lst)
  5.   (if (null? lst)
  6.       0
  7.       (+ (car lst) (suma2 (cdr lst)))))
  8.  
  9. (suma2 '(1 2 3 4))
  10.  
  11.  
  12. ; zoptymalizowane dodawanie
  13. (define (suma lst)
  14.   (define (pom acc l) ; funkcja pomocnicza
  15.     (if (null? l)
  16.         acc
  17.         (pom (+ acc (car l)) (cdr l))))
  18.   (pom 0 lst)) ; 0 - pierwsza wartość akumulatora
  19.  
  20. (suma '(1 2 3 4))
  21.  
  22. ; Zad 1
  23. ; Zaimplementować i przetestować funkcję potr – obliczającą n­tą potęgę liczby całkowitej
  24. ; (n>0).
  25.  
  26. (define (potega a n)
  27.   (define (pom acc iter x y)
  28.     (if (= iter n)
  29.         acc
  30.         (pom (* acc x) (+ iter 1) a n)))
  31.   (pom 1 0 a n))
  32.  
  33. (potega 3 3)
  34.  
  35. ; Zad 2
  36. ; Zaimplementować i przetestować funkcję dlugoscr – obliczającą długość listy z
  37. ; wykorzystaniem rekurencji ogonowej.
  38. ; (ilośc elementów)
  39. (define (dlugoscListy lst)
  40.   (define (pom acc l)
  41.     (if (null? l)
  42.         acc
  43.         (pom (+ acc 1) (cdr l))))
  44.   (pom 0 lst))
  45.  
  46. (dlugoscListy '(1 2 3 4 5 6 7 8 9 10 11 999))
  47.  
  48. ; Zad 3
  49. ; Zaimplementować i przetestować funkcję sumar – obliczająca sumę elementów na liście z
  50. ; wykorzystaniem rekurencji ogonowej.
  51.  
  52. (define (sumar lst)
  53.   (define (pom acc l) ; funkcja pomocnicza
  54.     (if (null? l)
  55.         acc
  56.         (pom (+ acc (car l)) (cdr l))))
  57.   (pom 0 lst)) ; 0 - pierwsza wartość akumulatora
  58.  
  59. (sumar '(1 2 3 4 5))
  60.  
  61. ; Zad 4
  62. ; Zaimplementować i przetestować funkcję maxr – odnajdującą liczbę o największej wartości
  63. ; (maksymalną) na liście z wykorzystaniem rekurencji ogonowej.
  64.  
  65. (define (najwieksza lst)
  66.   (define (pom max l) ; funkcja pomocnicza
  67.     (if (null? l)
  68.         max
  69.         (if (< (car l) max)
  70.             (pom max (cdr l))
  71.             (pom (car l) (cdr l)))))
  72.            
  73.   (pom (car lst) (cdr lst)))
  74.  
  75. (najwieksza '(5 7 6 8 3 1 2))
  76.  
  77. ; Zad 5
  78. ; Zaimplementować i przetestować funkcję fib r – obliczająca n­ty wyraz ciągu Fibonacciego z
  79. ; wykorzystaniem rekurencji ogonowej.
  80.  
  81. (define (fibonacci n)
  82.   (define (pom prev prev2 iter n)
  83.     (if (= iter n)
  84.         prev
  85.         (pom prev2 (+ prev prev2) (+ iter 1) n)))
  86.   (pom 0 1 0 n))
  87.  
  88. (fibonacci 1)
  89. (fibonacci 2)
  90. (fibonacci 3)
  91. (fibonacci 4)
  92. (fibonacci 5)
  93. (fibonacci 6)
  94. (fibonacci 10)
  95.  
  96. ; Zad 6
  97. ; Zaimplementować i przetestować funkcję odwroc – odwracająca kolejność elementów na liście
  98. ; z wykorzystaniem rekurencji ogonowej.
  99.  
  100. (define (odwroc lst)
  101.   (define (pom acc l) ; funkcja pomocnicza
  102.     (if (null? l)
  103.         acc
  104.         (pom (cons (car l) acc) (cdr l))))
  105.            
  106.   (pom '() lst))
  107.  
  108. (odwroc '(5 7 6 8 3 1 2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement