FLP

Z Varhoo
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(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, 10: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).
Osobní nástroje