[PL] Wprowadzenie do F# – podstawowe elementy składni

W nowym Visual Studio 2010 widoczne są projekty w nowym języku programowania F#.
Jeśli nie mieliście okazji się nim pobawić to polecam rozpocząć naukę jeszcze nie od samego Visual Studio, lecz od interpretera dołączonego do VS2010.

Aby go uruchomić należy wybrać z Menu Start Visual Studio 2010 Command Prompt i w konsoli wpisać polecenie fsi.exe:

Wynik powinien być następujący:

Setting environment for using Microsoft Visual Studio 2010 x86 tools. C:\Program Files\Microsoft Visual Studio 10.0\VC>fsi

Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506

Please send bug reports to fsbugs@microsoft.com For help type #help;;

> _

Możecie oczywiście rozpocząć od polecenia help, natomiast prosta ścieżka jaką proponuje wygląda następująco:

Wpiszmy najpierw:

> 42;;
val it : int = 42

Wyniki zawsze będę zaznaczał kursywą. Jak widzicie wpisanie wartości liczbowej powoduje przypisanie jej do zmiennej nazwanej wdzięcznie coś (it). Wpisaliśmy liczbę całkowitą, więc interpreter przyjął, że typem jest int.

Skoro już przypisaliśmy to możemy sprawdzić czy aby na pewno nasze coś ma wartość zgodną z oczekiwaną:

> it;;
val it : int = 42

Jak najbardziej, zatem parę dodatkowych testów z różnymi typami:

> 42.0;;
val it : float = 42.0
> "42";;
val it : string = "42"

Interpreter jak widać stara się domyśleć co autor miał na myśli.
Idziemy dalej, zdefiniujmy sobie krotki (tuples):

> (42, "Hello World");;
val it : int * string = (42, "Hello World")
> (42, "Hello World", 42.0);;
val it : int * string * float = (42, "Hello World", 42.0)

A teraz zdefiniujmy sobie funkcję:

> fun x -> x + 1;;
val it : int -> int = <fun:clo@0>

I spróbujmy ją wywołać z parametrem x=41;

> it 41;;
val it : int = 42

Teraz szybki eksperyment z słowem kluczowym let:

> let a = (42,"Hello World");;
val a : int * string = (42, "Hello World")

Jak widać za pomocą let możemy przypisać wartości do zdefiniowanych przez nas (nazwanych) zmiennych. Od razu przykład jak w ten sposób dobrać się do skladowych naszej krotki:

> let b = fst a;;
val b : int = 42
> let c = snd a;;
val c : string = "Hello World"

Przy krotkach z dwoma wyrażeniami fst (first) i snd (second) pomagają wybrać składowe.
Możemy też przyspieszyć proces:

> let (b,c)=a;;
val c : string = "Hello World"
val b : int = 42

Co jest jedyną opcją przy bardziej rozbudowanych krotkach:

> let a = (42,"Hello World", 42.0);;
val a : int * string * float = (42, "Hello World", 42.0)
> let (b,c,d) =a;;
val d : float = 42.0
val c : string = "Hello World"
val b : int = 42

Jeśli interesuje nas tylko jedna składowa to posługujemy się poniższą składnią:

> let (_ ,e, _) = a;;
val e : string = "Hello World"

Wróćmy do funkcji:

> let fncAddTen = (fun x –> x + 10);;
val fncAddTen: int –> int
> fncAddTen(12);;
val it : int = 22

I przykład wieloargumentowy:

> let fncAddNumbers = ( fun x -> (fun y -> x + y));;
val fncAddNumbers : int -> int –> int
> fncAddNumbers 32 35;;
val it : int = 67

Wersja z prostszą składnią:

> let fncAddNumbers x y = x + y;;
val fncAddNumbers : int -> int –> int
> fncAddNumbers 32 35;;
val it : int = 67

Oraz jeszcze jedna kombinacja z funkcją:

> let addTenToNumber = fncAddNumbers 10;;
val addTenToNumber : (int -> int)
> addTenToNumber 12;;
val it : int = 22

Powyższe przykłady bez komentarza są dobrym wstępem do funkcyjnego programowania za pomocą F#. Jeśli poszukujecie więcej informacji na temat tego języka to zapraszam na poniższe strony:
https://research.microsoft.com/en-us/um/cambridge/projects/fsharp/ (Strona R&D gdzie powstał język).
https://msdn.microsoft.com/pl-pl/fsharp/cc835246(en-us).aspx (zasoby do nauki języka)
https://msdn.microsoft.com/en-us/library/dd233154(VS.100).aspx (główna strona języka na MSDN Library)
https://msdn.microsoft.com/pl-pl/library/dd233249(en-us,VS.100).aspx (lista słów kluczowych do dalszej eksploracji)