Advertisement
MarkUa

Make level list

Oct 6th, 2019
917
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.77 KB | None | 0 0
  1. (define (not_ item)
  2.    (
  3.       cond ((EQ? item #f) #t)
  4.             ( #t #f)
  5.      
  6.  
  7.     )
  8. )
  9.  
  10. (define (and_  item1 item2)
  11.      
  12.      (cond ((EQ? item1 #f) #f)
  13.            ((EQ? item2 #f) #f)
  14.      (#t #t)
  15.      )
  16.  
  17. )
  18.  
  19. (define (or_ item1 item2)
  20.         ( not_ (and_ (not_ item1) (not_ item2) ) )
  21.  
  22. )
  23. (define (reverse_ list_  result  position )
  24.  
  25.     (cond ((EQ? list_ '())  result  )
  26.           ( (and_ (= position 1  ) (and_ (PAIR?  list_) (LIST? list_)) )
  27.  
  28.                             (cons  (car list_)  result ) )
  29.              ( ( and_  (= position 1  ) (and_ (PAIR?  list_) (not_ (LIST? list_)) )    )
  30.  
  31.                           (cons   list_   result ) )
  32.              ( (= 1 1)
  33.                         (reverse_ (cdr list_) (cons (car list_) result  )  ( - position 1) )
  34.                      )
  35.      )      
  36. )
  37.  
  38. (define (count1 lst len)
  39.  
  40.  (cond ((EQ? lst '() ) len  )
  41.         ((not_ (PAIR? lst)) len )
  42.         (else  (
  43.                     count1 (cdr lst  ) (+ len 1)
  44.                           ))))
  45.  
  46.  
  47.  
  48. ( define (level  input_list output_list  deep length)
  49.    
  50.    ( cond ( (  and ( < deep length) (> deep 0) )
  51.             ;(display output_list)
  52.            ;  (display (car input_list))
  53.            ;  (display (cons  (car input_list) '() ) )
  54.            ;  (display "\n")
  55.            (level  (cdr input_list)  (cons output_list  (cons  (car input_list) '() ) )  (+ deep 1) length)
  56.    )
  57.           (( and ( < deep length) (= deep 0))
  58.  
  59.      (level  (cdr input_list)   (cons  (car input_list) '() )   (+ deep 1) length)
  60.            )
  61.           ((= 1 1) output_list)
  62.           )
  63. )
  64.  
  65.  
  66. (define (make_level list)
  67.        (level   (reverse_ list '()   (count1 list 0) ) '() 0 (count1 list 0) )
  68.   )
  69.  
  70. (make_level '(4 2 4 4 1) )
  71. (make_level '(4 2 4 4 1 . 5) )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement