Kihagyás

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:

k :: a -> b -> a
k a b = a

s :: (a -> b -> c) -> (a -> b) -> a -> c
s f g a = f a (g a)

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"