; Lisp lab
; Michal Schorm - xschor02

; absolutni hodnota rozdilu dvou cisel
(defun abs_rozdil (a b) (if (> 0 (- a b)) (* -1 (- a b)) (- a b)))
(write (abs_rozdil 100 20))


; nejmensi prvek v seznamu
(defun min_seznam (seznam) ( if (= 2 (length seznam))
                                (if (> car(seznam) cdr(seznam)) (car(seznam)) (cdr(seznam)))
                                (if (> car(seznam) (min_seznam cdr(seznam))) (car(seznam)) (min_seznam cdr(seznam)))
                           )
)


; fibonnaciho posloupnost
(defun fib (a) 
  (cond ((= a 0) 0)
        ((= a 1) 1)
        (t  (+ (fib (- a 1) )  (fib (- a 2) ) ) )
  )
)

(write-line "Fibonnacci: ")
(write (fib 0 ))
(write (fib 1 ))
(write (fib 2 ))
(write (fib 3 ))
(write (fib 4 ))
(write (fib 5 ))
(write (fib 6 ))
(write-line " ")
(write-line " ")

; ackermann function
(defun ack (a b) 
  (cond ((= a 0) (+ 1 b))
        ((= b 0) (ack (- a 1) 1))
        (t (ack (- a 1) (ack a (- b 1)))  )
  )
)
(write-line "Ack 0,0 - 0,1 - 0,2")
(write (ack 0 0 ))
(write (ack 0 1 ))
(write (ack 0 2 ))
(write-line " ")
(write-line "Ack 1,0 - 2,0 - 1,1")
(write (ack 1 0 ))
(write (ack 2 0 ))
(write (ack 1 1 ))
(write-line " ")
(write-line "Ack 4,0")
(write (ack 4 0 ))
(write-line " ")
(write-line "Ack 3,2")
(write (ack 3 2 ))