mboost-dp1
Microsoft
- Forside
- ⟨
- Forum
- ⟨
- Nyheder
Lundt (1) skrev:Hvad fanden er F# ? det må jeg sku lige google.
Hvad finder du frem til, og hvordan adskiller det sig fra C#?
Kom så alle sammen, fortæl os hvor store nogle svin Microsoft er, når nu de onde sataner frigiver det under Apache licensen.
BurningShadow (3) skrev:Kom så alle sammen, fortæl os hvor store nogle svin Microsoft er, når nu de onde sataner frigiver det under Apache licensen.
Challenge accepted.
Microsoft er nogen onde sataner, da de vil os til at programmere i flere ML-lignende sprog ved at gøre kildekoden frit tilgængelig.
ML er ondt, ergo er Microsoft onde. Q.E.D.
Wiki om F#
Det kan godt være F# er smart, men det er sku ikke letlæselig...
Nu har jeg lige skimmet de links, der er blevet smidt herind, og selvom jeg arbejder som programmør, så har jeg svært ved at se og forstå, hvad der sker i de F# koder.
Giv en helt almindelig person (uden programmerings egenskaber) en C#, PHP, Java kode og jeg vil gætte på at de vil kunne forstå hvad der sker. Det vil de ikke kunne med F# kode.
Kommer til at tænke på Regular Expression. Det er også et mega kraftfuld værktøj, men det er absolut ikke letforstålig.
Det eneste der lige popper frem som en rigtig fed feature er F# Interactive (FSI). Det at kunne afprøve en kode stump, bare ved at markere den og trykke Alt+Enter er mega nice, så man ikke skal til at compile hele projektet inde man kan debugge.
Nu har jeg lige skimmet de links, der er blevet smidt herind, og selvom jeg arbejder som programmør, så har jeg svært ved at se og forstå, hvad der sker i de F# koder.
Giv en helt almindelig person (uden programmerings egenskaber) en C#, PHP, Java kode og jeg vil gætte på at de vil kunne forstå hvad der sker. Det vil de ikke kunne med F# kode.
Kommer til at tænke på Regular Expression. Det er også et mega kraftfuld værktøj, men det er absolut ikke letforstålig.
Det eneste der lige popper frem som en rigtig fed feature er F# Interactive (FSI). Det at kunne afprøve en kode stump, bare ved at markere den og trykke Alt+Enter er mega nice, så man ikke skal til at compile hele projektet inde man kan debugge.
#8
Funktionel programmering, og ML/OCalm er intet nyt. Du burde udvide din horison, hvis du umiddelbart ikke synes det er letlæseligt.
Enhver programmør burde kunne læse og forstå F# på et grundlæggende niveau.
Funktionel programmering, og ML/OCalm er intet nyt. Du burde udvide din horison, hvis du umiddelbart ikke synes det er letlæseligt.
Lad være med at fortælle din chef det. Og se så at få efterspurt noget mere efteruddannelse.fennec (8) skrev:og selvom jeg arbejder som programmør, så har jeg svært ved at se og forstå, hvad der sker i de F# koder.
Enhver programmør burde kunne læse og forstå F# på et grundlæggende niveau.
M.daugaard (2) skrev:Hvad finder du frem til, og hvordan adskiller det sig fra C#?
(* print a list of numbers recursively *)
let rec printList lst =
match lst with
| [] -> ()
| h :: t ->
printf "%d\n" h
printList t
(* Same thing, using matching against list elements *)
let rec printList2 l =
match l with
| [] -> ()
| h :: t -> printfn "%A" h
printList2 t
(* Using shorthand for match *)
let rec printList3 = function
| [] -> ()
| h :: t -> printfn "%A" h
printList3 t
(* Or, using a higher-order function *)
let printlist4 lst = List.iter (printfn "%A") lst
Syntes godt nok det er inviklet i forhold til c#. Men det højst sandsynligt kun fordi jeg ikke kan programmere i F#.
Et eksempel de fleste nok kan forholde sig til, nemlig QuickSort
Bedre formatteret kode: https://gist.github.com/667484
head = nuværende element.
tail = resterende elementer.
[] -> [] = håndtering af tom liste. (returner et tomt set.)
(List.filter benytter sig af en lambda expression, noget enhver programmør med respekt for sig selv kan finde ud af)
Bedre formatteret kode: https://gist.github.com/667484
let rec QuickSort(input : List<int>) =
match input with
| [] -> []
| head :: tail ->
let smaller = qsort (tail |> List.filter(fun e -> e <= x))
let larger = qsort (tail |> List.filter(fun e -> e >= x))
smaller @ [head] @ larger
head = nuværende element.
tail = resterende elementer.
[] -> [] = håndtering af tom liste. (returner et tomt set.)
(List.filter benytter sig af en lambda expression, noget enhver programmør med respekt for sig selv kan finde ud af)
Prøv at sammenligne QuickSort eksemplet med en C# implementering.Lundt (10) skrev:Syntes godt nok det er inviklet i forhold til c#. Men det højst sandsynligt kun fordi jeg ikke kan programmere i F#.
Du vil hurtigt finde at alt der er det mindste rekursivt (eller async) er meget lettere i F#.
Windcape (9) skrev:Enhver programmør burde kunne læse og forstå F# på et grundlæggende niveau.
F# kræver altså lige at man sætter sig ind i grundelementerne... ellers er det næsten ren volapyk.
bl.a. skal man forstår hvordan koden fortolkes og syntaxen.
Hvis man koder C# dagen, er det ikke ensbetydende med at forstå F#.
F# minder om LEX eller FLEX parsere som jeg havde på DTU - men det er sku ikke ensbetydende med at F# giver mening...
ku godt tænke mig at lege med F# men har ikke lige haft tid eller energi til at sætte mig ind i det.
Overhovedet ikke. Størstedelen er som i enhvert andet programmeringssprog.Montago (13) skrev:F# kræver altså lige at man sætter sig ind i grundelementerne... ellers er det næsten ren volapyk.
Det er endsbetydende med at man forstår lambda, hvis man bare har den mindste selvrespekt, og fra der er vejen til det funktionelle paradigm, og dermed funktionel programmering, meget kort.Montago (13) skrev:Hvis man koder C# dagen, er det ikke ensbetydende med at forstå F#.
Det eneste som minder om det er vel at man bruger | til at beskrive statement-trees i.Montago (13) skrev:F# minder om LEX eller FLEX parsere som jeg havde på DTU - men det er sku ikke ensbetydende med at F# giver mening...
Og at man koder C# til hverdag, betynder forhåbelig også at man kender til andre sprog end C# ! Så derfor mener jeg at enhver programmør burde kunne forstå det quicksort eksempel jeg har postet.
Apropo letforstålig programeringskode, så mener jeg nu at vb.net slår alle i let forståelighed og er det nemmeste at lære
#9
Har skam også tænkt mig at tjekke F# ud :)
Jeg har lært mig selv mange sprog (og glemt dem igen fordi jeg ikke bruger dem). Af de sprog jeg har brugt i længere tid startede jeg i Turbo Pascal, så Java, så VB (ASP) og nu i C#. Der imellem har jeg afprøvet flere sprog end jeg snart har tal på (php, c, ruby og mange andre).
I modsætning til F#, så er det utrolig nemt at gå til et nyt sprog, da syntaxen (som ofte) liger hinanden. Det eneste man egentlig bruger tid på er at finde ud af hvad funktionen, til hvad man nu vil, hedder. F.eks hvis vil man udskrive tallene 1 til 10, så er det næsten kun "write" funktionen, som er forskellige fra sprog til sprog (da den kan hedde echo, write, print osv.).
Som #13 nævner, så er grund elementerne i F# meget anderledes end de "normale" sprog. Og derfor vil indlæringstiden være meget længere, end hvad jeg skulle bruge på at lære de andre sprog.
Men som sagt, så skal jeg da helt klart afprøve det. Og da det er et .NET sprog, burde man jo kunne lave funktioner, som man kan kalde fra C#. Og derfor bruge F# og C# der hvor de hver har deres styrke.
[Edit]
Så lige din #14 post. Skal ikke kunne udtale mig om "Størstedelen er som i enhvert andet programmeringssprog". Af hvad jeg har set indtil videre, så ligner det ikke andre sprog. Men jeg ændre måske mening, når jeg dykker ned i det.
Hvis du tilfældigvis kender til en god tutorial, må du da gerne smide et link :)
Har skam også tænkt mig at tjekke F# ud :)
Jeg har lært mig selv mange sprog (og glemt dem igen fordi jeg ikke bruger dem). Af de sprog jeg har brugt i længere tid startede jeg i Turbo Pascal, så Java, så VB (ASP) og nu i C#. Der imellem har jeg afprøvet flere sprog end jeg snart har tal på (php, c, ruby og mange andre).
I modsætning til F#, så er det utrolig nemt at gå til et nyt sprog, da syntaxen (som ofte) liger hinanden. Det eneste man egentlig bruger tid på er at finde ud af hvad funktionen, til hvad man nu vil, hedder. F.eks hvis vil man udskrive tallene 1 til 10, så er det næsten kun "write" funktionen, som er forskellige fra sprog til sprog (da den kan hedde echo, write, print osv.).
Som #13 nævner, så er grund elementerne i F# meget anderledes end de "normale" sprog. Og derfor vil indlæringstiden være meget længere, end hvad jeg skulle bruge på at lære de andre sprog.
Men som sagt, så skal jeg da helt klart afprøve det. Og da det er et .NET sprog, burde man jo kunne lave funktioner, som man kan kalde fra C#. Og derfor bruge F# og C# der hvor de hver har deres styrke.
[Edit]
Så lige din #14 post. Skal ikke kunne udtale mig om "Størstedelen er som i enhvert andet programmeringssprog". Af hvad jeg har set indtil videre, så ligner det ikke andre sprog. Men jeg ændre måske mening, når jeg dykker ned i det.
Hvis du tilfældigvis kender til en god tutorial, må du da gerne smide et link :)
Her er lidt om lambdakalkylen som danner grundlaget for funktionel programmering.
Og er man virkelig interesseret kan man anskaffe sig:
The Lambda Calculus: Its Syntax and Semantics
Og er man virkelig interesseret kan man anskaffe sig:
The Lambda Calculus: Its Syntax and Semantics
Diverse C sprog ligner hinanden. Hvis du har arbejdet mere med OCalm, ML, Haskell, Lisp, Python, Ruby så ville det slet ikke være så underligt, som hvis du kommer fra en ren C-sprog baggrund.fennec (16) skrev:I modsætning til F#, så er det utrolig nemt at gå til et nyt sprog, da syntaxen (som ofte) liger hinanden
Det passer så ikke.fennec (16) skrev:Som #13 nævner, så er grund elementerne i F# meget anderledes end de "normale" sprog. Og derfor vil indlæringstiden være meget længere, end hvad jeg skulle bruge på at lære de andre sprog.
Du skal kun lære ét nyt koncept: statement piping. Resten fungere ligesom i det imperative sprog. At bare benytter expression tree's i langt højere grad i F# end i andre sprog, betyder ikke at det ikke findes i C#.
Det handler i høj grad mere om hvilke paradigmer/koncepter man kender til. C#, JavaScript, Python og Ruby er nok de imperative (hybrid) sprog som har flest af de funktionelle koncepter.
Det er så overhovedet ikke nødvendigt at forstå overstående for at kunne benytte sig af funktionel programmering eller F#.Ildhesten (17) skrev:Her er lidt om lambdakalkylen som danner grundlaget for funktionel programmering.
Og er man virkelig interesseret kan man anskaffe sig:
The Lambda Calculus: Its Syntax and Semantics
Det er mest til teoretikerne som synes matematik er sjovere end praktisk programmering :p
(Og hele grunden til at FP har været hovedsageligt forbeholdt det akademiske niveau de sidste 70 år.)
#19
Okay, Ill bite...
Nu behøver man jo ikke holde de 2 ting adskilt som du er så glad for. Jeg vil også vove at påstå at kan du først udtrykke ting i lambda calculus, kan du også skrive fx Scheme, eller LISP.
Er det nødvendigt at forstå lambda calculus for at man kan skrive et funktionelt program i F#? Nej bestemt ikke, men det skader aldrig at udvide sin horisont, som du selv nævner i tidligere indlæg.
Okay, Ill bite...
Windcape (19) skrev:
Det er mest til teoretikerne som synes matematik er sjovere end praktisk programmering :p
Nu behøver man jo ikke holde de 2 ting adskilt som du er så glad for. Jeg vil også vove at påstå at kan du først udtrykke ting i lambda calculus, kan du også skrive fx Scheme, eller LISP.
Er det nødvendigt at forstå lambda calculus for at man kan skrive et funktionelt program i F#? Nej bestemt ikke, men det skader aldrig at udvide sin horisont, som du selv nævner i tidligere indlæg.
#20
Forskellen er bare at F# og lambda-expressions (i kode, ikke matematisk), er brugbare, hvor lambda-calculus er meningsløst matematik for matematikerne.
Og Lisp handler nu mere om at kunne overskue parenteserne i sine sexps, end alt andet :p
P.S. Scheme er en dialekt af LISP. (Så "eller" giver ikke mening)
Forskellen er bare at F# og lambda-expressions (i kode, ikke matematisk), er brugbare, hvor lambda-calculus er meningsløst matematik for matematikerne.
Og Lisp handler nu mere om at kunne overskue parenteserne i sine sexps, end alt andet :p
P.S. Scheme er en dialekt af LISP. (Så "eller" giver ikke mening)
Windcape (21) skrev:#20
Og Lisp handler nu mere om at kunne overskue parenteserne i sine sexps, end alt andet :p
emacs gør den slags til et trivielt problem.
Windcape (21) skrev:#20
Forskellen er bare at F# og lambda-expressions (i kode, ikke matematisk), er brugbare, hvor lambda-calculus er meningsløst matematik for matematikerne.
Det fint at du ikke forstår meningen. Men der er et stort hop fra det, og så at konkludere det er meningsløst.
En god slat de teknikker som funktionelle compilere benytter sig af idag, er blevet udledt af at teoretikere har siddet og fedtet med deres lambda calculus. Hvilket du skylder dem at være dybt taknemmelig for, og derfor ikke kalde deres arbejde med lambda calculus meningsløst.
#16: De sprog du nævner er også imperative(ruby har vidst også nolge funktionelle elementer), hvor imod F# er funktionelt. Det er et helt andet paradigme og er derfor også anderledes.
Jeg synes det er fornuftigt at man lærer et nyt programmeringssprog engang imellem... men det burde også inkludere en ny platform.
Det virker lidt åndssvagt at hvis man både programmerer i C# eller VB.Net på .NET platformen, at man så lærer endnu et sprog som kører på .NET, bare fordi det er nyt og fancy.
Letlæselig kode, ja tak! Komprimeret og smartass-syntax, nej tak!
Det virker lidt åndssvagt at hvis man både programmerer i C# eller VB.Net på .NET platformen, at man så lærer endnu et sprog som kører på .NET, bare fordi det er nyt og fancy.
Letlæselig kode, ja tak! Komprimeret og smartass-syntax, nej tak!
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.