Advertisement
PonaFly

Untitled

Mar 16th, 2016
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 3.85 KB | None | 0 0
  1. (define (stages tree)
  2.   (define (helper t)
  3.     (if (empty? t)
  4.         '()
  5.         (cons (list (car t))
  6.               (map-append (helper (cadr t))
  7.                           (helper (caddr t))))))
  8.   (if (empty? tree)
  9.       #f
  10.       (helper tree)))
  11.  
  12. (define (map-append lst1 lst2)
  13.   (cond [(empty? lst1) lst2]
  14.         [(empty? lst2) lst1]
  15.         [else (cons (append (car lst1) (car lst2))
  16.                     (map-append (cdr lst1)
  17.                                 (cdr lst2)))]))
  18. (define (left tree)
  19.   (cadr tree))
  20. (define (right tree)
  21.   (caddr tree))
  22. (define (division tree)
  23.  (define (help tree i) ;где и-значение узла
  24.    (cond
  25.      ( (or(null? tree) (and (null? (right tree)) (null? (left tree)))) false)      ; останавливаемся когда дерево или его потомки одновременно пусты
  26.      ( (null? (left tree)) (if (=(remainder i (car (right tree)))0) i (help (right tree) (car (right tree))))) ; если остаток деления узла на кар от правого поддерева
  27.      ( (null? (right tree))(if (= (remainder i (car (left tree)))0) i  (help (left tree) (car (left tree))))) ; равен 0 то i,иначе рекурсию.
  28.      ( (or (= (remainder i (car (left tree)))0) (= (remainder i (car (right tree)))0)) i)                      ; если поддеревья не нулы то все равно нужно спросить
  29.      (else (or (help (left tree) (car (left tree))) (help (right tree) (car (right tree)))))))         ;иначе запукаем рекурсию с поддеревьями и и как их первые узлы
  30.   (help tree (car tree)))                                                                                   ;очевидно
  31.  
  32. #lang scheme
  33. (define (left tree)
  34.   (cadr tree))
  35. (define (right tree)
  36.   (caddr tree))
  37.  
  38. (define (minleaf tree)
  39.   (define (help tree i)
  40.     (cond
  41.       ((null? tree) +inf.0) ; по условию если пустое,то беск.
  42.       ((and(null? (left tree)) (null? (right tree))) (min (car tree) i)) ;если лист-то выбираем минимум из i и значения в данном листе
  43.       (else (min (help (left tree)  i ) (help (right tree)  i))))) ; иначе берем минимум из минимумов левых и правых поддеревьев
  44.   (help tree +inf.0))
  45.  
  46.  
  47. (define (left tree)
  48.   (cadr tree))
  49. (define (right tree)
  50.   (caddr tree))
  51.  
  52.   (define (symmetric tree)
  53.   (if (empty? tree)
  54.       '()
  55.       (list (car tree)
  56.             (symmetric (right tree))
  57.             (symmetric (left tree)))))
  58. (define (left tree)
  59.   (cadr tree))
  60. (define (right tree)
  61.   (caddr tree))
  62. (define (lefttrees tree)
  63.   (define (help tree i)  ;и-кол-во левых потомков
  64.     (cond                 ;
  65.       ( (null? tree)  i )  ; если дерево пусто-то выдает накопленный и
  66.       ( (not(null? (left tree))) (+ (help (right tree)  i) (help (left tree) (+ 1 i) ))) ; если не пустое левое поддерево то запускаем две рекурсии,в одной меняем i
  67.       (else (help (right tree) i))))                                                         ;аесли левое пустое ,то вызываем рекури от правого поддерева
  68.   (define (result e)                                                                     ; вспомогательная функция нужна для умееньшения результата на единицу
  69.   (+ e                                                                                       ;поскольку он считает корень дерева как за левый потомок
  70.   (help tree 0)))
  71.   (result -1))                                                                       ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement