Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
pitel:izu:uloha3 [02. 04. 2013, 08.59:21] – file pitel | pitel:izu:uloha3 [30. 12. 2022, 13.43:01] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Úkol 3 ====== | ||
+ | Vyzkoušet si práci s jazykem LISP. | ||
+ | <file lisp funkce.lsp> | ||
+ | ;faktorial | ||
+ | |||
+ | (defun fact (n) | ||
+ | (cond ((= n 1) 1) | ||
+ | (t (* n (fact (- n 1)))))) | ||
+ | |||
+ | ; | ||
+ | ;fibonacci | ||
+ | ; fib (0) = 0 | ||
+ | ; fib (1) = 1 | ||
+ | ; fib (n) = fib (n-1) + fib (n-2) | ||
+ | |||
+ | (defun fib (n) | ||
+ | (if (< n 2) | ||
+ | n | ||
+ | (+ (fib (- n 1)) (fib (- n 2))))) | ||
+ | |||
+ | |||
+ | ; | ||
+ | ;m >= 0, n >= 0 | ||
+ | ;ack(0, n) = n+1 | ||
+ | ;ack(m, 0) = ack(m-1, 1) | ||
+ | ;ack(m, n) = ack(m-1, ack(m, n-1)) | ||
+ | |||
+ | (defun ack (m n) | ||
+ | (cond | ||
+ | | ||
+ | | ||
+ | (t (ack (1- m) (ack m (1- n)))))) | ||
+ | </ | ||
+ | |||
+ | <file lisp seznamy.lsp> | ||
+ | ; spojeni seznamu | ||
+ | |||
+ | (defun spoj (L1 L2) | ||
+ | (cond ((NULL L1) L2) | ||
+ | (T (cons (car L1) (spoj (cdr L1) L2))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | ; vytvorte | ||
+ | ;obraceni obecneho seznamu obratOb(seznam) | ||
+ | (defun obratOb (S) | ||
+ | (cond ((null S) nil) | ||
+ | ((atom (car S)) (spoj (obratOb (cdr S)) (cons (car S) nil))) | ||
+ | (T (spoj (obratOb (cdr S)) (cons (obratOb (car S)) nil))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | ; test zda je prvek obsazen v obecnem seznamu jePrvekOb(seznam, | ||
+ | (defun jePrvekOb (S P) | ||
+ | (cond ((NULL S) nil) | ||
+ | ((atom S) (= S P)) | ||
+ | (t (or (jePrvekOb (car S) P) (jePrvekOb (cdr S) P)) ) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | ; prumer prvku obecneho seznamu prumerPrvkuOb(seznam) | ||
+ | (defun prumerPrvkuOb (S) | ||
+ | (cond ((null S) ()) | ||
+ | (T (/ (soucetPrvkuOb S) (pocetPrvku S))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | (defun pocetPrvku (S) | ||
+ | (cond ((null S) 0) | ||
+ | ((atom (car S)) (+ 1 (pocetPrvku(cdr S)))) | ||
+ | (T (+ (pocetPrvku (car S)) (pocetPrvku (cdr S)))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | ; soucet prvku obecneho seznamu soucetPrvkuOb(seznam) | ||
+ | (defun soucetPrvkuOb (S) | ||
+ | (cond ((null S) 0) | ||
+ | ((atom (car S)) (+ (car S) (soucetPrvkuOb (cdr S)))) | ||
+ | (T (+ (soucetPrvkuOb (car S)) (soucetPrvkuOb (cdr S)))) | ||
+ | ) | ||
+ | ) | ||
+ | ; overeni monotonnosti linearniho seznamu monotonnostLin(seznam) | ||
+ | ; | ||
+ | (defun monotonnostLin (S) | ||
+ | (or (roste S) (klesa S)) | ||
+ | ) | ||
+ | |||
+ | (defun roste (S) | ||
+ | (cond ((null S) T) | ||
+ | ((null (cdr S)) T) | ||
+ | (T (and (<= (car S) (car (cdr S))) (roste (cdr S)))) | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | (defun klesa (S) | ||
+ | (cond ((null S) T) | ||
+ | ((null (cdr S)) T) | ||
+ | (T (and (>= (car S) (car (cdr S))) (klesa (cdr S)))) | ||
+ | ) | ||
+ | ) | ||
+ | </ |