#programowanie #programowaniefunkcyjne #fsharp #dotnet

Jakiś czas temu napisałem post, że nie lubię gdy metody w klasach mają side-effect i najlepiej jakby były "pure" (wiadomo - publiczne mogą zmieniać stan, ale najlepiej jakby jedna metoda zmieniał stan w możliwie-minimalnym stopniu).
Jakiś Mirek wtedy napisał o programowaniu funkcyjnym i dodam, że wcześniej kojarzyłem, że coś takiego istnieje, ale nie wiedziałem dokładnie z czym to się je, bo się tym nie interesowałem. No ale że
@LeopoldStuff: Przynajmniej jedna firma w Gdańsku eksperymentuje z F#, aczkolwiek nie wiem czy mają już jakiś produkcyjny kod. Ja z kolei piszę prawie wyłącznie w Scali i mam z tuzin produkcyjnych aplikacji w niej napisanych i jest bardzo dużo firm które jej używają. Także programowanie funkcyjne jak najbardziej istnieje również w praktyce :)
Widzę, że nuda w tagu, ciągle tylko "czy warto uczyć się tego?", "mam problem z tym".
A ja nie będę o nic pytał, tylko coś wam pokażę. Napisałem sobie dwie wersje drzewa binarnego z podstawowymi funkcjami - jedną w F#, drugą w C# i powiem jedno - z każdym dniem zaczynam się coraz bardziej przekonywać do zdania haskelowych freaków, że programowanie funkcyjne jest zajebiste. Nie dość, że kod w
Niby tak, ale zastanawia mnie jedna rzecz - czy za tę łatwość, szybkość i przyjemność nie trzeba czasem płacić dodatkową złożonością obliczeniową.


@o-o_i: Powiedziałbym że jest to kwestia implementacji. Programując w F# bardzo często korzysta się z innego rodzaju danych (np. o wiele więcej immutable'i), a przede wszystkim korzysta się z paradygmatu funkcyjnego, gdzie naturalnie występuje więcej rekursji i złożonych wywołań. Z drugiej strony należy pamiętać, że zarówno pod C# jak
#fsharp #programowanie #naukaprogramowania

Niby taka prosta rzecz, a utknąłem.
Chcę zawrzeć warunek w tym czymś co się nazywa pipe operator:

member this.messageObjects:seq =
t.Descendants "p"
|> Seq.map (fun x -> x.InnerText())
|> JESLI MESSAGELIMITS > 0 TO ZWROC JEDNA SEKWENCJĘ, JEŚLI NIE, NIC NIE ZMIENIAJ

Jeśli messageLimits jest większe od zera, to zwróć "Seq.take messageLimits", jeśli jest równe zero, zwróć to co było bez żadnych zmian.

Próbowałem tak:

|> fun x ->
Mam pytanie odnośnie F#:
W ramach zapoznawania się z tym językiem chciałbym utworzyć sobie prostą aplikację, która przetworzy dane z pliku XML i wyświetli dane w postaci wykresów. Doinstalowałem sobie wszystkie potrzebne narzędzia F# do Visual Studio 2015, z tym że nie bardzo teraz wiem jak taki projekt utworzyć.
Z projektów do utworzenia mam do wyboru tylko "Console Application" (w którym podejrzewam że nie będzie jak wyrenderować wykresów) oraz Library (które z
@Wunderwafel:
1. Stwórz "Console Application"
2. Dodaj bibliotekę System.Windows.Forms
3. Podmień kod w pliku Program.fs na:

open System
open System.Windows.Forms

module Main =
let label =
let temp = new Label()
do temp.Text<- "Hello, World!"
temp
let form = new Form(Text = "First Window App")
form.Controls.Add(label)

Application.Run(form)
#programowanie
Mirki mam problem, otoz chcialbym sobie troche we F# podłubać ale bez tego molocha jakim jest visual studio, chcialem uzyc atoma +ionide , lub vs code + ionide, aczkolwiek za cholery nie potrafie w jednym i w drugim skompilowac projektu (repl tj linijkowiec dziala ale chcialbym caly projekt zbudowac :< )

@Hoff:
ref i := sa nie 'funkcyjne' ^^ . Twoj kod jest spoko, nie musisz na sile szukac rozwiazan funkcyjnych.

Natomiast sprobojmy to zmienic uzywajac rekurencji i operatora with ktory fajnie wspolgra jesli chodzi o tworzenie nowego recordu na bazie starego z nowa zmieniona wartoscia. Dzieki temu nie masz przypisani i mutacji stanu obiektu ale generowany ciagle nowy obiekt.

Inna ciekawostka, miast loopa uzylem rekurencji z matchem po kolekcji ( head::tail
@Hoff: Mam jedynie doswiadczenie w laczeniu F# jako mniejsze techniczne moduliki do robienia np migracji danych. Nigdy nie robilem czegos co corowo byloby oparte na F#.

Problemem F# jest :
- learning curve - jest to inne podejscie i wymaga nowego rodzaju wiedzy i doswiadczenia.
- dostepnosc programistow - F# nie jest popularny i ciezej o programmera
- stawki dla programisty - F# owiec w LND zarabia 20-30% wiecej od C#
@Hoff: Sztandarowym przykładem, który pokazuje Luca Bolognese (jeden z twórców F#) na swoich wykładach jest program pobierający kursy giełdowe z zewnętrznej witryny i pokazujący je na wykresach. Sam program jest całkiem krótki, ale jeśli nie widziałeś jego realizacji nigdzie w necie to możesz spróbować sobie coś takiego stworzyć.
@SwordPL: No właśnie pomysł jest o tyle ciekawy, że najpotrzebniejsze rzeczy są zrobione (build, nuget, testy), a jak czegoś brakuje to masz właściwie całego .NETa dostępnego, więc można cudować
ARM vs x86: Pathfinding benchmark of C++, D, Go, Nim, Ocaml, Common Lisp, Racket, C#, Java, Haskell, F#, Rust and Dart

Porównanie wydajności róƶnych języków programowania i ich implementacji na platformach x86 i ARM przy pomocy algorytmu wyszukiwania najdłuƶszej ścieƶki. Pomiędzy językami są lekkie zmiany w algorytmie, więc nawet pomijając QoI cięƶko je porównywać (chociaƶ C++ i D w ścisłej czołówce mnie cieszą)

#fsharp #programowanie

Przerabiam tutorial z F# i pojawiło się właśnie coś takiego jak "tuples". Wygląda jak tablice, tylko zamiast kanciastych klamerek, są nawiasy ( ͡º ͜ʖ͡º)

Nigdy nie widziałem czegoś takiego wcześniej w innych językach (albo o tym nie wiem ;P). Co to jest i czym się różni od tablic bądź list?