Ladies_Man

Обработка списков

Dec 17th, 2013
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.19 KB | None | 0 0
  1. (define (my-range a b d)
  2.   (define (iter a b d xs)
  3.     (if (< a b)
  4.         (iter (+ a d) b d (append xs (list a)))
  5.         xs))
  6.   (iter a b d '()))
  7.  
  8. (define (my-flatten xs)
  9.   (define (iter xs ys)
  10.     (if (null? xs)
  11.         ys
  12.         (if (list? (car xs))
  13.             (iter (cdr xs) (append ys (iter (car xs) '())))
  14.             (iter (cdr xs) (append ys (list (car xs)))))))
  15.   (iter xs '()))
  16.  
  17. (define (my-element? x xs)
  18.   (define (f x xs k)
  19.     (if (null? xs)
  20.         (not k)
  21.         (if (equal? (car xs) x)
  22.             k
  23.             (f x (cdr xs) k))))
  24.   (f x xs #t))
  25.  
  26. (define (my-filter pred? xs)
  27.   (define (iter pred? xs ys)
  28.     (if (null? xs)
  29.         ys
  30.         (if (pred? (car xs))
  31.             (iter pred? (cdr xs) (append ys (list (car xs))))
  32.             (iter pred? (cdr xs) ys))))
  33.   (iter pred? xs '()))
  34.  
  35. (define (my-fold-left op xs)
  36.   (define (iter op xs count)
  37.     (if (null? xs)
  38.         count
  39.         (iter op (cdr xs) (op count (car xs)))))
  40.   (iter op (cdr xs) (car xs)))
  41.  
  42. (define (my-fold-right op xs)
  43.   (define (iter op xs count)
  44.     (if (null? xs)
  45.         count
  46.         (iter op (cdr xs) (op (car xs) count))))
  47.   (iter op (cdr (reverse xs)) (car (reverse xs))))
Advertisement
Add Comment
Please, Sign In to add comment