Permalänk

Funktionell programmering

Tänkte leka lite med funktionell programmering innan skolan börjar. Någon som har hållit på med detta och kan rekommendera ett språk att leka lite med? Vad är mest använt och därför vettigast att lära sig?

Visa signatur

Intel 7700K 4,2 GHz | ASUS ROG Stric GTX 1080 | 16 GB DDR4 | ASUS ROG STRIX Z270H GAMING | Samsung 850 EVO

Permalänk
Medlem
Skrivet av Insanity92:

Tänkte leka lite med funktionell programmering innan skolan börjar. Någon som har hållit på med detta och kan rekommendera ett språk att leka lite med? Vad är mest använt och därför vettigast att lära sig?

Erlang skulle jag rekommendera då kan du iallafall på jobb på Ericsson.

Permalänk
Medlem

Många (om inte de flesta) av de större språken har funktionella komponenter. Du kan skriva funktionell kod i JavaScript om du är så lagd.

Om man tittar på "rent" funktionella språk så är frasen "mest använt" något som blir en oviktig fråga. De är så pass få projekt som använder dem.

Lisp (Clojure om du vill ha tillgång till Java eller .NET plattformen) är trevlig och står ut bland de funktionella då det förenklar metaprogrammering i hög grad. Används i Emacs om man vill mecka med det. Micro-Manager har en plugin för Clojure.

SML är (eller var för ett tag sedan) språket man började med på DVP i Uppsala. Trevligt språk, men inte något jag skulle se som sista ordet i debatten.

Haskell är intressant då det är väldigt rent och låter en fokusera enbart på de funktionella bitarna.

F# är trevligt om man vill köra VS och .NET. F# har type provider för lite allt möjligt. Matlab och R. Något som gör det lättare att prata med de programmen.

Nyttigast att lära sig skulle nog vara Clojure eller F#. Anledningen är inte att de används i någon högre grad, men att de har tillgång till Java/.NET och att man kan lära sig något om bibliotek som hör till de plattformarna.

Men det är nog bäst att titta på FP som en övning i sätt att tänka och inte så mycket som att man lär sig X för en framtida karriär.

Visa signatur

.<

Permalänk
Skrivet av oelrich:

Många (om inte de flesta) av de större språken har funktionella komponenter. Du kan skriva funktionell kod i JavaScript om du är så lagd.

Om man tittar på "rent" funktionella språk så är frasen "mest använt" något som blir en oviktig fråga. De är så pass få projekt som använder dem.

Lisp (Clojure om du vill ha tillgång till Java eller .NET plattformen) är trevlig och står ut bland de funktionella då det förenklar metaprogrammering i hög grad. Används i Emacs om man vill mecka med det. Micro-Manager har en plugin för Clojure.

SML är (eller var för ett tag sedan) språket man började med på DVP i Uppsala. Trevligt språk, men inte något jag skulle se som sista ordet i debatten.

Haskell är intressant då det är väldigt rent och låter en fokusera enbart på de funktionella bitarna.

F# är trevligt om man vill köra VS och .NET. F# har type provider för lite allt möjligt. Matlab och R. Något som gör det lättare att prata med de programmen.

Nyttigast att lära sig skulle nog vara Clojure eller F#. Anledningen är inte att de används i någon högre grad, men att de har tillgång till Java/.NET och att man kan lära sig något om bibliotek som hör till de plattformarna.

Men det är nog bäst att titta på FP som en övning i sätt att tänka och inte så mycket som att man lär sig X för en framtida karriär.

Ja, absolut. Har bara tänkt testa det lite och få en känsla för vad det är för något. Tror jag ska kolla lite på Clojure då jag är mest hemma på Java, tackar

Visa signatur

Intel 7700K 4,2 GHz | ASUS ROG Stric GTX 1080 | 16 GB DDR4 | ASUS ROG STRIX Z270H GAMING | Samsung 850 EVO

Permalänk
Medlem

Haskell är ett rätt bra funktionellt språk som varit med ett tag. Det viktiga är att fatta "grejen" med funktionell programmering.
F# har fördelen med att det har .Net bindings och hela den grejern. Men det kan också göra att man tappar fokus på det man egentligen skall lära sig. Så jag rekommenderar Haskell att börja med.

Kolla på http://learnyouahaskell.com/ för en helt ok online bok med lite humor för att ta dig igenom.

Visa signatur

Huvudriggen är en Gigabyte Aorus Xtreme | 128gb DDR5 6000 | Ryzen 7950X | 3080Ti
Utöver det är det för många datorer, boxar och servar för att lista :P

Permalänk
Datavetare

Clojure är nog ett riktigt bra val om du är bekväm med Java då du ganska lätt kan utöka dina program med funktioner du redan har i Java.

Ett ställe som kan vara lite intressant att titta på är langref.org där man har en massa små och enkla problem som är löst i flera språk, bl.a. Clojure, Erlang, F# och Haskell, men även i Java om du vill jämföra med ett sådant språk.

Clojure är kanske inte världens mest använda språk, men det är trots allt en av de mest använda funktionella språken just nu.

Inte för att det är superviktigt, men det finns två huvudklasser av funktionella språk: de "rena" och de "orena". Av de språk som nämnts ovan är det endast Haskell som är "rent". Det som menas med "rent"/"orent" är huruvida man tillåter att funktionella delar gör anrop till funktioner med sidoeffekter, tillåts detta är språket "orent". Funktioner som har sidoeffekter kan däremot alltid anropa "rena" funktioner, även i Haskell.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Insanity92:

Ja, absolut. Har bara tänkt testa det lite och få en känsla för vad det är för något. Tror jag ska kolla lite på Clojure då jag är mest hemma på Java, tackar

Vilken skola/linje är du innepå?

Chalmers civ.ing eller GU? Eller annan?

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |

Permalänk
Medlem
Skrivet av Insanity92:

Ja, absolut. Har bara tänkt testa det lite och få en känsla för vad det är för något. Tror jag ska kolla lite på Clojure då jag är mest hemma på Java, tackar

Du kan även ta en titt på Scala som är "lika funktionellt" som Clojure men har mer Java-likt syntax och statiskt typsystem!

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Dakkie:

Vilken skola/linje är du innepå?

Chalmers civ.ing eller GU? Eller annan?

LTH, såg att de använder Haskell i deras kurs dock men det ser inte lika kul ut

Hade inte tänkt plugga det om det är det du menar. Är mer sugen på att testa vad det är för nåt.

Visa signatur

Intel 7700K 4,2 GHz | ASUS ROG Stric GTX 1080 | 16 GB DDR4 | ASUS ROG STRIX Z270H GAMING | Samsung 850 EVO

Permalänk
Avstängd

Jag skulle börjat med nån List variant, företrädesvis Scheme eftersom det är ett förenklat LISP. Boken SICP av Sussman ligger gratis på nätet, och är berömd bok. Den används i introkursen till programmering på MIT, och på KTH när jag läste där. Scheme är ett mycket enkelt språk och går snabbt att börja programmera med.
http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman...

Lisp var ju ett av de första funktionella språken om inte det första(?), som alla andra kopierar utav. Graham en känd Lisp programmerare, har skrivit mycket om Lisp. Det verkar riktigt coolt. Det är "farfar" till alla andra.

Ska man programmera professionellt, så är det väl Erlang eller Haskell eller F#(?) som gäller, tror jag. OCAML används en del också.

EDIT: Wtf? Clojure är ju en lisp dialect! Ja, då är det bara att köra på Clojure eller Scheme (som antaligen är enklare?)

Permalänk
Medlem
Skrivet av Teknocide:

Du kan även ta en titt på Scala som är "lika funktionellt" som Clojure men har mer Java-likt syntax och statiskt typsystem!

Två negativa saker.

Permalänk
Medlem
Skrivet av tufflax:

Två negativa saker.

Ibland kanske, det beror på hur det är implementerat. Med mycket type inference och bra tooling är det väldigt trevligt då många buggar upptäcks redan innan tester har skrivits. Haskell exempelvis är ju ett funktionellt språk där typinferens sägs minimera "bökigheten" med ett statiskt typsystem.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Det var inte igår man satt och pillade med Haskell. Kanske borde dra in det på Raspberryn och känna på det lite.