Operand strzalki w Haskellu

0

Moglby mi ktos wytlumaczyc dlaczego w tym przypadku jest uzyta '<-' zamiast '=' ? Nie za bardzo to potrafie zrozumiec :|

func  (x:xs) = func[y | y <- xs, y <= x]
1
  1. Operator, nie operand -- operandami strzałki są y oraz xs
  2. To się bierze ze związku tego zapisu z zapisem do w Haskellu -- ale może go (jeszcze?) nie kojarzysz. Tak czy owak, i tu i tam chodzi o to, że wykonujemy/obliczamy coś dla y przyjmującego wartości pochodzące z (w tym wypadku) listy, a nie równe tej liście, a więc a <- [2, 5] oznacza, że obliczenie należy powtórzyć dwa razy, dla 2, potem dla 5. Można czytać w tym kontekście <- jako 'należy' (trochę podobnie też wygląda).
  3. Zresztą, znak = służy do definiowania stałych (w tym funkcji), więc nie jest tu chyba w ogóle poprawny.
  4. Nie masz ty przypadkiem nieskończonej rekursji...?
1

<- to tuaj generator listy. Nie ma wiele do rozumienia - bo to konstrukt języka, syntax sugar. https://wiki.haskell.org/List_comprehension
Ten zapisz oznacza:
Zrób mnie listę elementów y takich że (|) y <= x (przy czym x to pierwszy element list head).
A te elementy y pochodzą <- z xs (czyli ogona listy).
Gdyby tam było = to byłob, że weź mi taki y, który jest ogonem listy. czyli tworzyłbyś listę list.

0

Dzięki, dość zaintrygował mnie sposób programowania funkcyjnego i chciałbym w przyszłości spróbować napisać jakas webowa apke w scali. Czy warto uczyc sie najpierw czysto funkcyjnego haskella, zeby nabrać lepszych nawyków czy Od razu wskakiwać w scale?

1

W Scali da się zbudować fantazyjne konstrukcje znane z Haskella, ale to raczej działka dla entuzjastów. scalaz bądź cats zawierają całą masę funkcyjnego szaleństwa, ale pragmatyczni Scalowcy tego nie używają. Nałogowe używanie typeclasses czy monady IO nie jest potrzebne by móc doświadczyć zalet funkcyjnego programowania. Podstawą programowania funkcyjnego są niezmienne (niemutowalne) dane:

https://en.wikipedia.org/wiki/Functional_programming
In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.

Mimo wszystko polecam zagłębić się w różnego rodzaju konstrukcje programowania funkcyjnego. Możesz od razu wskoczyć w Scalę i nauczyć się programowania funkcyjnego z książki "Functional Programming in Scala" którą napisali Paul Chiusano i Runar Bjarnason. Książka jest ogólnie niezła, chociaż radzę nie siedzieć zbyt długo nad monadą IO - w Scali monady IO i tak słabo wyglądają i działają (nie ma TCO w JVMie więc trzeba kombinować z np trampolinowaniem).

Ja sam programowanie funkcyjne poćwiczyłem najpierw na Haskellu przerabiając tutorial Learn You a Haskell for Great Good! Można go ogarnąć na spokojnie w kilka weekendów. Wiedząc jak wyglądają konstrukcje językowe w Haskellu można je porównać z konstrukcjami Scalowymi (np Haskellowy do-notation ze Scalowymi for-comprehensions) i wtedy stają się bardziej zrozumiałe. Polecam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1