Funkcionális nyelvek 1. Ea
Tematika
- Functor, Foldable
- Applicative, Traversable
- Monád
- parser és interpreter egyszerű nyelvekhez
Haskell
Haskell:funkcionális, statikus típusos, erősen típusos
statikus típusos: mielött lefutna ellenőriz
erősen típusos: ami a memoriába van annak mindig lehet tudni a típusát
tiszta nyelv: típusban megjelenik ha van mellékhatás
first class mellékhatások vannak: listában leehtnek mellékhatásos függvények, lehet őket átadni módosítani.
HOS: Haskell Operating System
Idris: Haskell függő típusos replacmentje
Funkcionális programozás 101
Az első funkcionális nyelv a Lisp volt. (60- as években) Első imperatív nyelv: (assembly) Fortran (R ,C libraryk is Fortranra építenek)
első leírása annak hogy mi az hogy algoritmus: lambda kalkulus (Turin complete)
kötések:
-
$ \substack{\lim \ x \rightarrow \infty } \left(\frac{1}{x+2}\right) $ = $ \substack{ \lim \ z \rightarrow \infty} \left(\frac{1}{z+2}\right)$
-
(\ x \(\rightarrow\) x + 2) = (\ y \(\rightarrow\) y + 2)
Kombinátor logika
lambdakalkulus legegyszerűbb leírása: Moses Schönfinkel kombinátor logikája: S,K kombinátor
(Random cuccok lol) Mathematica szoftver (Stephen Wolfram), Maple, Octave (analízis házi cheat )
kombinátor logika haskellben:
ezzel a két kombinátorral a világ összes függvényét ki lehet fejezni
ezzel a két függvényel fel lehet építeni természetes számokat: Természetes számok Church kódolása
-- identitás függvény
-- Java-ban <C> C i(C input) {return input;}
-- i :: forall c . c -> c
i :: a -> a
i = s k k
-- s :: (a -> b -> c) -> (a -> b) -> a -> c
-- k :: a -> b -> a
-- s k :: (a -> b) -> a -> a
-- s k :: (a -> a -> a) -> a -> a
-- k :: a -> a -> a
-- s k k :: a -> a
-- a -> b -> c = a -> (b -> c)
--curry-zes (Haskell Curry) ((Schönfinkelezés))
nagyon egyszerű funkcionális programozást bizonyítani Egyenlőségi érvelés: be akarom bizonyítani hogy i u = u minden u-re
i x = ((s k) k) x (balra zárojelezéss rossz, fordítva kéne lenni) miért f(x) és nem x|f
i u = (def) s k k u = k u (k u) = (\(k\beta\)) u
s f g a = f a (g a)
k a b = a
Idézetek
"ez a tárgy nem olyan nagyon nehéz mert ez csak haskell programozás szóval szinte gyakorlat alatt meg lehet tanulni a tárgyat"
"annyi a különbség a python és a haszkell között hogy a pythonban a tipúshibák futás közben jönnek elő, haskellben futás előtt, nem egyértelmű hogy melyik a jobb"