Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
| pitel:izu:uloha3 [03. 07. 2012, 11.53:43] – upraveno mimo DokuWiki 127.0.0.1 | 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)))) | ||
| + | ) | ||
| + | ) | ||
| + | </ | ||