Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: BoneFlute 11. 07. 2018, 01:46:40
-
Ahoj.
Mějme funkci (třeba v Haskellu):
foo a = a + 1
Existuje nějaký zajímavý důvod, proč je ten argument před rovnítkem?
Mám totiž takovouto úvahu:
Pokud symbolu přiřazuju hodnotu:
a = 1
b = "text"
c = True
tak v případě funkce přiřazuju lambdu:
foo = \a -> a + 1
Díky za odpovědi.
-
Ja sa pridam otazkou, ako sa robi nad definiciami funkcie cez lambdu pattern matching?
(To '=' mi tiez prijde, ze je to len na zmatenie nepriatela, ale haskellisti budu mat asi dobry dovod na takyto syntakticky cukor)
-
Ahoj.
Mějme funkci (třeba v Haskellu):
foo a = a + 1
Existuje nějaký zajímavý důvod, proč je ten argument před rovnítkem?
Mám totiž takovouto úvahu:
Pokud symbolu přiřazuju hodnotu:
a = 1
b = "text"
c = True
tak v případě funkce přiřazuju lambdu:
foo = \a -> a + 1
Díky za odpovědi.
Nevim, jestli rozumim, o co Ti jde. Ale klic podle me je v tom, co pises dole
a = 1
b x = x
c x y = x + y
V Haskellu nejsou zvlast konstanty a funkce. Haskellovsky program je reseni soustavy rovnic. Prava a leva strana rovnice, to je podle me klic k vysvetleni.
-
Ja sa pridam otazkou, ako sa robi nad definiciami funkcie cez lambdu pattern matching?
(To '=' mi tiez prijde, ze je to len na zmatenie nepriatela, ale haskellisti budu mat asi dobry dovod na takyto syntakticky cukor)
buď \x -> case x of ..
a nebo s -XLambdaCase
\case
1 -> ...
2 -> ...
-
nemám na to rozumnou odpověď, ale fakt bych nechtěl muset psát tím druhým způsobem, takže tipuju, že v tom hraje roli ergonomie
-
Existuje nějaký zajímavý důvod, proč je ten argument před rovnítkem?
Zajimavy to asi neni, ale podle me je duvodem podobnost s matematickym zapisem.
f(x) = x + 1
Cte se to jako "Funkce 'f' jedne promenne x ...".
-
Neni lepší jít touhle cestou ?
((.)(.) :: (have'' -> boobs'') -> (in' -> haskell'))
-
Je to jako v matematice, f(x)=něco(x) je to samé, co f=λx.něco(x). Při psaní kódu je to kratší a přehlednější. Žádná věda v tom není.
-
Ja sa pridam otazkou, ako sa robi nad definiciami funkcie cez lambdu pattern matching?
(To '=' mi tiez prijde, ze je to len na zmatenie nepriatela, ale haskellisti budu mat asi dobry dovod na takyto syntakticky cukor)
buď \x -> case x of ..
a nebo s -XLambdaCase
\case
1 -> ...
2 -> ...
Dakujem :)
-
Haskellovsky program je reseni soustavy rovnic. Prava a leva strana rovnice, to je podle me klic k vysvetleni.
Díky.
-
ale fakt bych nechtěl muset psát tím druhým způsobem
Proč?
-
ale fakt bych nechtěl muset psát tím druhým způsobem
Proč?
pohodlí - bylo by to delší, ošklivější a pattern matching na více argumentech by byl takový divný
-
ale fakt bych nechtěl muset psát tím druhým způsobem
Proč?
pohodlí - bylo by to delší, ošklivější a pattern matching na více argumentech by byl takový divný
foo x = x + 1
versus
foo = x -> x + 1
Ano, přísně vzato je to o kousek delší.
foo (x:xs) = [(x + 1) : (foo xs)]
versus
foo = (x:xs) -> [(x + 1) : (foo xs)]
pattern matching IMHO pohoda, divnost nevidím - možná ukaž příklad
Co je ošklivější je obávám se otázka zvyku. Mě přijde "ošklivá" ta nekonzistence, že přiřazení hodnoty se děje jinak, než přiřazení funkce.
-
ale fakt bych nechtěl muset psát tím druhým způsobem
Proč?
Je to pro masochisty, viz CPL.
-
na více než jednom argumentu
f (x:xs) (y:ys) = ...
f _ _ = ...
vs.
f = \a b -> case (a, b) of ...
-
na více než jednom argumentu
f (x:xs) (y:ys) = ...
f _ _ = ...
vs.
f = \a b -> case (a, b) of ...
Rozumím. Takže když by to bylo takto?
f = (x:xs) (y:ys) -> ...
-
najdi si na wiki co je to Eta redukce
a neco o lambda funkcich
jinak https://wiki.haskell.org/Eta_conversion
takze tve:
f a = a + 1
je plne equivaletni k:
f = (+) 1
-
na více než jednom argumentu
f (x:xs) (y:ys) = ...
f _ _ = ...
vs.
f = \a b -> case (a, b) of ...
Rozumím. Takže když by to bylo takto?
f = (x:xs) (y:ys) -> ...
tak bych řekl, že současný stav je mi milejší :D konzistentnost je fajn, ale ergonomie je pro mě víc - a konzistentnost na ni může mít jak pozitivní tak i negativní vliv
-
tak bych řekl, že současný stav je mi milejší :D konzistentnost je fajn, ale ergonomie je pro mě víc - a konzistentnost na ni může mít jak pozitivní tak i negativní vliv
V čem vidíš tu ergonomii?
-
najdi si na wiki co je to Eta redukce
a neco o lambda funkcich
jinak https://wiki.haskell.org/Eta_conversion
takze tve:
f a = a + 1
je plne equivaletni k:
f = (+) 1
Ah, znám, ale nedošlo mi. Jasný, díky.
-
tak bych řekl, že současný stav je mi milejší :D konzistentnost je fajn, ale ergonomie je pro mě víc - a konzistentnost na ni může mít jak pozitivní tak i negativní vliv
V čem vidíš tu ergonomii?
viz tady
dále ta syntaxe co jste navrhoval by asi vyžadovala dvojité odsazení v případě pattern matchingu
f =
\.. ->
...
\... ->
...
a vůbec, myslím, že se v tom zbytečně moc vrtáte :)