Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.70 KB | None | 0 0
  1.  
  2.  
  3. (define (my-foldl f x xs)
  4.   (if (null? xs)
  5.       x
  6.       (my-foldl f (f (car xs) x) (cdr xs))
  7.    )
  8.  )
  9.  
  10. (foldl cons '() (list 1 2 3))
  11. (my-foldl cons '() (list 1 2 3))
  12. (foldl + 0 (list 1 2 3))
  13. (foldr append '() (list (list 1 2 3) (list 4 5 6) (list 7 8 9)))
  14.  
  15.  
  16.  
  17. ;;;;;;;; 1
  18. (define (favg f g)
  19.   (lambda (x)
  20.     (/ (+ (f x) (g x)) 2)
  21.    )
  22.  )
  23.  
  24. ((favg sqr sqrt) 9)
  25.  
  26. ;;;;;;;; 2
  27. (define (flist fs)
  28.   (lambda (x)
  29.     (foldl (lambda (f x) (f x)) x fs)
  30.    )
  31.  )
  32.  
  33. ((flist (list sqrt (lambda (x) (+ x x)) sqr)) 4)
  34.  
  35.  
  36.  
  37. ;;;;;;;; 3
  38.  
  39. (define (sieve-of-eratosthenes n)
  40.   (define (helper remaining-numbers)
  41.     (if (null? remaining-numbers)
  42.         '()
  43.         (cons (first remaining-numbers)
  44.               (helper (filter (lambda (k) (> (remainder k (first remaining-numbers)) 0))
  45.                               (rest remaining-numbers))))))
  46.   (helper (range 2 (+ n 1))))
  47.  
  48. (define (sieve n)
  49.   (define (sieve-helper remaining)
  50.     (if (null? remaining)
  51.         remaining
  52.         (let* (
  53.               (first (car remaining))
  54.               (dividedBy (lambda (i)
  55.                            (< 0 (remainder i first))))
  56.               )                  
  57.           (cons first (sieve-helper (filter dividedBy (cdr remaining))))
  58.         )
  59.     )
  60.     )
  61.   (sieve-helper (range 2 n))
  62.  )
  63. (sieve-of-eratosthenes 50)
  64. (sieve 50)
  65.  
  66. ;;;;;;;;;; 4
  67. (define (dedup xs)
  68.   (define (insert-if-not-present x xs)
  69.     (if (member x xs)
  70.         xs
  71.         (append xs (list x))
  72.      )
  73.     )
  74.   (foldl insert-if-not-present '() (list 1 1 2 2 2 3))
  75.  )
  76. (dedup '(1 1 2 2 2 3))
  77.  
  78. (define (dedup2 xs)
  79.   (if (null? xs)
  80.       xs
  81.       (let ((first (car xs)))
  82.         (cons first (dedup2 (filter (lambda (x) (not (= x first))) (cdr xs))))
  83.        )
  84.     )
  85.  )
  86. (dedup2 '(1 1 2 2 2 3))
  87.  
  88.  
  89. ; Зад. 3 Да се дефинира функция (insert-sorted x xs),
  90. ; която вмъква число x в сортиран в нарастващ ред списък xs.
  91. ; (insert-sorted 5 '()) == '(5)
  92. ; (insert-sorted 5 '(4 6)) == '(4 5 6)
  93.  
  94. ; Зад. 4 Използвайки insert-sorted и foldl, да се дефинира
  95. ; функция my-sort, която сортира списък.
  96. ; (my-sort '(3 5 0 1)) == '(0 1 3 5)
  97.  
  98.  
  99. ;;;;;;;;;;
  100. (define (insert-sorted x xs)
  101.    (if (null? xs)
  102.        (list x)
  103.        (if (<= x (car xs))
  104.            (cons x xs)
  105.            (cons (car xs) (insert-sorted x (cdr xs)))
  106.          )
  107.      )
  108.  )
  109. (insert-sorted 5 '())
  110. (insert-sorted 5 (list 1 2))
  111. (insert-sorted 5 (list 4 6))
  112.  
  113. ;;;;;;;;;;
  114. (define my-sort
  115.   (lambda (xs)
  116.     (foldl insert-sorted '() xs)
  117.    )
  118.  )
  119. (my-sort (list 4 6 3 9 55 0))
  120.  
  121. (define my-sort2 (curry foldl insert-sorted '()))
  122. (my-sort2 (list 4 6 3 9 55 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement