Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. p6.
  2. let rec maxim list = if List.tl list = [] then List.hd list
  3.  
  4. else let m1 = maxim ([List.hd list]) and m2 = maxim (List.tl list) in
  5. if m1>m2 then m1
  6. else m2
  7.  
  8.  
  9. ;1.
  10. let rec fibo = function n -> if n<2 then 1 else fibo(n-1) + fibo(n-2)
  11.  
  12. ;2.
  13. let rec ack x y = if (x>0 && y>0) then (ack(x-1) (ack x (y-1))) else if (x>0 && y=0) then (ack (x-1) 1) else (y+1)
  14.  
  15. ;3.
  16. let rec geninterval a b =
  17.     if a > b then []
  18.     else a :: geninterval (a+1) b
  19.  
  20. let rec geninterval (x,y) = if x=y then [x]
  21.    
  22. else let a = [x] in a @ (geninterval ((x+1),y))
  23.  
  24. ;4.
  25. let my_not a = if(a = true) then false else true
  26. let my_and a b = if (a = true) then if (b = true) then true else false else false
  27. let my_or a b = if (a = true) then true else if (b = true) then true else false
  28.  
  29. ;5.
  30.  
  31. let rec digits nr = if (nr <= 9) then [nr] else (digits (nr / 10)) @ [(nr mod 10)]
  32. //let digits nr = List.rev (make-list nr)
  33. //let digits nr = while (nr > 0) do (nr mod 10) :: [] done;;
  34.  
  35. 6.
  36.  
  37. ;7.
  38. let rec cmmdc a b =
  39.     let rest = a mod b in
  40.         if (rest = 0) then b else cmmdc b rest
  41.  
  42.  
  43.  
  44. --------------------------------------------------------------------------------------------------------------------------
  45.  
  46.  
  47.  
  48. ;p1.
  49. (defmacro define ((function_name &rest param) body) `(defun ,function_name ,(mapcar 'prin1 param) ,body))
  50. (define (sum x y)
  51.               (+ x y))
  52. (print (sum 2 2))
  53.  
  54. ;p2.
  55. (defmacro dotimes1 ((var count &optional (res nil)) &rest body) `(do ((,var '0 (+ '1 ,var))) ((= ,var (- ,(eval count) '1)) ,res) ,(car body)))
  56. (setq result '())
  57. (dotimes1 (x (+ 1 5)) (setq result (append result (list x))))
  58. (print result)
  59.  
  60. ;OR
  61.  
  62. (defmacro do-times ((var count result) body)
  63.     `(do ((,var 0 (+ 1 ,var)))
  64.          ((= ,var (- ,count 1)) ,result)
  65.          ,body)
  66.     )
  67. (print (do-times (n 10 'Finished!) (print (+ n n))))
  68.  
  69. ;p3.
  70. (defun rev (l) (nreverse l))
  71. (setq l '(a b c d))
  72. (rev l)
  73. (print l)
  74. (print (eql l (rev l)))
  75.  
  76. ;OR
  77.  
  78. (defun rev2 (list)
  79.      (setq aux (reverse list))
  80.      (rplaca list (car aux))
  81.      (rplacd list (cdr aux))
  82.      )
  83. (print (rev2 l))
  84. (print (eql l (rev2 l)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement