FLP
(Založena nová stránka: == Huskell == '''Základní funkce''' * init - vrátí sezname kromě posledního prvku * last - vrátí seznam kromě prvního prvku * head - vrátí první prvek ze sezn…) |
(→Gödel) |
||
(Není zobrazeno 6 mezilehlých verzí od 1 uživatele.) | |||
Řádka 1: | Řádka 1: | ||
− | == Huskell == |
+ | == Haskell == |
+ | Stránka o programování v jazyce [[haskell]]. |
||
'''Základní funkce''' |
'''Základní funkce''' |
||
Řádka 9: | Řádka 9: | ||
Znovunačtení souboru |
Znovunačtení souboru |
||
>> :r |
>> :r |
||
+ | |||
+ | |||
+ | === Příklady === |
||
+ | Struktura pro lambda kalkul |
||
+ | |||
+ | data Lam = Var String |
||
+ | | Abs ( Lam ) ( Lam ) |
||
+ | | App ( String ) ( Lam ) |
||
+ | deriving (Show, Eq) |
||
+ | |||
+ | Nalezení všech volných proměnných, pokud nemůžeme použít elem, tak si jej nadefinujeme. |
||
+ | |||
+ | my_elem it ll = (filter (==it) ll ) /= [] |
||
+ | |||
+ | Jsou potřeba řešit 3 případy, které jsou dány 3 základními prvky lambda kalkulu:''' proměnná''', '''aplikace''', '''abstrakce'''. |
||
+ | Myšlenkou je, že si udržujeme počet všech vázaných proměnných. Pokud nalezneme proměnou, která není ve vázaných, tak je volná a vrátíme ji na výstup (díky rekurzi probublají jako výsledek, aniž by je bylo potřeba přímo ukládat). |
||
+ | Vázané proměnné jsou definovány pouze v abstrakci a tedy všechny které jsou pak "nalevo" a stejného jména, tak jsou vázané. |
||
+ | |||
+ | get_free lam = eval lam [] |
||
+ | where |
||
+ | eval (Var a) ll = if my_elem a ll then [] else [a] |
||
+ | eval (Abs b c) ll = (eval b ll) ++ (eval c ll) |
||
+ | eval (App a b) ll = eval b (a:ll) |
||
== Prolog == |
== Prolog == |
||
+ | Stránka o programování v jazyce [[prolog]]. |
||
+ | |||
Načtení souboru pro wsi-prolog |
Načtení souboru pro wsi-prolog |
||
>> compile('filename.pl') |
>> compile('filename.pl') |
||
+ | |||
+ | |||
+ | |||
+ | * nonvar a var testuje zda se jedná o proměnou nebo hodnotu. Funkce '''var''' vrací true pokud se jedná o proměnou např. X, _ , kdežto '''nonvar''' vrací true v případě že se jedná o hodnotu např. 'jana', 1. |
||
+ | |||
+ | var(1). -> false. |
||
+ | var('jana'). -> false. |
||
+ | var(_). - > true. |
||
+ | var(X). - > true. |
||
+ | |||
+ | nonvar(1). -> true. |
||
+ | nonvar('jana'). -> true. |
||
+ | nonvar(_). - > false. |
||
+ | nonvar(X). - > false. |
||
+ | |||
+ | ==Gödel== |
||
+ | |||
+ | Výpočet fibonaccio čísel |
||
+ | |||
+ | MODULE Fibonacci. |
||
+ | IMPORT Integers. |
||
+ | |||
+ | PREDICATE Fib : Integer * Integer. |
||
+ | |||
+ | Fib(0,0). |
||
+ | Fib(1,1). |
||
+ | Fib(k,n) <- |
||
+ | k > 1 & |
||
+ | FibIt(k-2,1,1,n). |
||
+ | |||
+ | PREDICATE FibIt : Integer * Integer * Integer * Integer. |
||
+ | |||
+ | FibIt(0,_,g,g). |
||
+ | FibIt(k,f,g,n) <- |
||
+ | k > 0 & |
||
+ | g < n & |
||
+ | FibIt(k-1,g,f+g,n). |
||
+ | |||
+ | |||
+ | Výpočet faktoriálu |
||
+ | |||
+ | MODULE Factorial |
||
+ | IMPORT Integers |
||
+ | |||
+ | PREDICATE Fac: Integer * Integer |
||
+ | |||
+ | Fac(0,1). |
||
+ | Fac(1,1). |
||
+ | Fac(k,v) <- |
||
+ | k > 1 & |
||
+ | Fac(k-1, v*k). |
||
+ | |||
+ | |||
+ | Zjistí zda je číslo prvočíslo |
||
+ | |||
+ | MODULE PRIME. |
||
+ | IMPORT Integers. |
||
+ | |||
+ | PREDICATE Prime : Integer. |
||
+ | |||
+ | Prime(prime) <- ~ SOME [x] (x > 1 & x < prime & prime Mod x = 0). |
Aktuální verze z 14. 5. 2012, 09:24
Obsah |
[editovat] Haskell
Stránka o programování v jazyce haskell.
Základní funkce
- init - vrátí sezname kromě posledního prvku
- last - vrátí seznam kromě prvního prvku
- head - vrátí první prvek ze seznamu
- last - vrátí poslední prvek seznamu
Znovunačtení souboru
>> :r
[editovat] Příklady
Struktura pro lambda kalkul
data Lam = Var String | Abs ( Lam ) ( Lam ) | App ( String ) ( Lam ) deriving (Show, Eq)
Nalezení všech volných proměnných, pokud nemůžeme použít elem, tak si jej nadefinujeme.
my_elem it ll = (filter (==it) ll ) /= []
Jsou potřeba řešit 3 případy, které jsou dány 3 základními prvky lambda kalkulu: proměnná, aplikace, abstrakce. Myšlenkou je, že si udržujeme počet všech vázaných proměnných. Pokud nalezneme proměnou, která není ve vázaných, tak je volná a vrátíme ji na výstup (díky rekurzi probublají jako výsledek, aniž by je bylo potřeba přímo ukládat). Vázané proměnné jsou definovány pouze v abstrakci a tedy všechny které jsou pak "nalevo" a stejného jména, tak jsou vázané.
get_free lam = eval lam [] where eval (Var a) ll = if my_elem a ll then [] else [a] eval (Abs b c) ll = (eval b ll) ++ (eval c ll) eval (App a b) ll = eval b (a:ll)
[editovat] Prolog
Stránka o programování v jazyce prolog.
Načtení souboru pro wsi-prolog
>> compile('filename.pl')
- nonvar a var testuje zda se jedná o proměnou nebo hodnotu. Funkce var vrací true pokud se jedná o proměnou např. X, _ , kdežto nonvar vrací true v případě že se jedná o hodnotu např. 'jana', 1.
var(1). -> false. var('jana'). -> false. var(_). - > true. var(X). - > true.
nonvar(1). -> true. nonvar('jana'). -> true. nonvar(_). - > false. nonvar(X). - > false.
[editovat] Gödel
Výpočet fibonaccio čísel
MODULE Fibonacci. IMPORT Integers. PREDICATE Fib : Integer * Integer. Fib(0,0). Fib(1,1). Fib(k,n) <- k > 1 & FibIt(k-2,1,1,n). PREDICATE FibIt : Integer * Integer * Integer * Integer. FibIt(0,_,g,g). FibIt(k,f,g,n) <- k > 0 & g < n & FibIt(k-1,g,f+g,n).
Výpočet faktoriálu
MODULE Factorial IMPORT Integers
PREDICATE Fac: Integer * Integer
Fac(0,1). Fac(1,1). Fac(k,v) <- k > 1 & Fac(k-1, v*k).
Zjistí zda je číslo prvočíslo
MODULE PRIME. IMPORT Integers. PREDICATE Prime : Integer. Prime(prime) <- ~ SOME [x] (x > 1 & x < prime & prime Mod x = 0).