Advertisement
MarkUa

Untitled

Sep 16th, 2019
988
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 3.48 KB | None | 0 0
  1. (define (count1 lst len)
  2.  
  3.  (cond ((null? lst) len  )
  4.         ((not (PAIR? lst)) len )
  5.         (else  (
  6.                     count1 (cdr lst  ) (+ len 1)
  7.                           ))))
  8.  
  9.  
  10. (define (reverse_ list_  result  position )
  11.  
  12.     (cond ((null? list_)  result  )
  13.           ( (and (= position 1  ) (PAIR?  list_) (LIST? list_) )
  14.  
  15.                             (cons  (car list_)  result ) )
  16.              ( (and  (= position 1  ) (PAIR?  list_) (not (LIST? list_)) )
  17.  
  18.                           (cons   list_   result ) )
  19.              (else
  20.                         (reverse_ (cdr list_) (cons (car list_) result  )  ( - position 1) )
  21.                      )
  22.      )      
  23. )
  24.  
  25. (define (check li copy possible_pair_position deep)
  26.  
  27.       (cond ((null? li)  copy  )
  28.             ( (and (=  possible_pair_position 1  ) (PAIR?  li) (LIST? li) )
  29.  
  30.                          (reverse_ (cons  (car li)  copy ) '() deep)     )
  31.              ( (and (=  possible_pair_position 1  ) (PAIR?  li) (not (LIST? li)) )
  32.  
  33.                          (reverse_ (cons   li   copy ) '() deep)  )
  34.            ( (=  possible_pair_position 1  )
  35.  
  36.              (cons  (car li) copy ) )
  37.            (else
  38.                    
  39.  
  40.       (check (cdr li  ) (cons (car li) copy )   (- possible_pair_position 1) deep )
  41.                  
  42.             )
  43.        )
  44.  
  45.  )
  46. (define (second my_list)
  47.      (define len  ( count1 my_list 0) )
  48.      (cond ((< len 2) "less than 2")
  49.            ((= len 2) '() )
  50.            (else  ( check (cddr my_list) '()  (- len 2) (- len 2) )
  51.  
  52.                            )
  53.            )
  54.        
  55.   )
  56.  
  57. (define r '() )
  58.  
  59. (define (first my_list)
  60.    
  61.      (cond ((and  (not (LIST? my_list)) (not (PAIR? my_list))) "atom" )
  62.            ((< ( count1 my_list 0) 2) "list size less than 2"  )
  63.            ((= ( count1 my_list 0) 2)
  64.                                        (cond ((and (not (LIST? my_list)) (PAIR? x) )
  65.                                       (set! r (cons ( cdr my_list) r))
  66.                                         (set! r (cons (car my_list) r))                                                                
  67.                                   r  )
  68.                                        (else
  69.                            
  70.                                                (set! r (cons ( cadr my_list) r))
  71.                                         (set! r (cons (car my_list) r))                                                                
  72.                                                 r                       )
  73.                                              )                  )
  74.            ((> ( count1 my_list 0) 2)
  75.                                         (set! r (cons ( cadr my_list) r))
  76.                                         (set! r (cons (car my_list) r))                                                                
  77.                                   r )
  78.  
  79.                     (else  '(car my_list)
  80.  
  81.                            )
  82.            )
  83.      
  84.      
  85.   )
  86.  
  87.  
  88.  
  89.  (define x '( 2 44 5 . 3  ) )
  90.  
  91.  (display x)
  92. (display "\n")
  93.  
  94. (define first_part (first  x))
  95. (define second_part '() )
  96. (define result '())
  97. (cond ( (or (EQ? first_part "atom" ) (EQ? first_part "list size less than 2"))
  98.      
  99.          (display "could not make oparations because of ")
  100.         (display first_part)  )
  101.       (else
  102.             (set! second_part (second x))
  103.             (set! result (cons second_part result))
  104.             (set! result (cons first_part result))
  105.             (display result)
  106.        )
  107. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement