In Haskell kun je wel hetzelfde bereiken met de functie map. Deze past een bepaalde functie toe op ieder element van de meegegeven lijst.
1
2
3
4
| abslist :: [Int] -> [Int] abslist list = map abs list where abs x | x < 0 = -x | otherwise = x |
Deze code berekent de absolute waarde van een lijst integers. (Beetje roestig in Haskell, maar denk dat t klopt).
of do while
Ik denk dat je eerst eens op moet gaan zoeken wat haskell precies is. Haskell is namelijk een compleet ander type programmeer taal dan talen als Java, C, C++, C#, Delphi, PHP, Javascript.
Hint: Zoek eens op functionele talen
[ Voor 6% gewijzigd door Woy op 13-10-2004 11:46 ]
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ja, je heb wel dingen als ==, maar die gebruik je ook weer in functies. Zoals boven staat toch al "if (x < 0) result = -x; else result = x;"
Verwijderd
1
2
3
| blaat :: num -> num -> num blaat x 0 = x blaat x y = blaat (x^2) (y-1) |
doet stiekum een if in regel 2 (if tweede parameter = 0 dan tweede param returnen) en een while door regel 3 (while y > 0 normaals aanroepen maar met y-1).
Je moet dus even anders leren denken dan in niet-funcitonele talen...
De functioneel van functionele talen doelt niet op "functies en procedures"jvaneijk schreef op 13 oktober 2004 @ 11:48:
Ja ik weet het dat Haskell een functionele programmeertaal is en dat Java enzo een Imperatieve programmeertaal is en dat functioneel eingelijk alles door middel van procedures doet?
Functies en procedures gebruik je in een imperatieve taal.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Heel het functioneel programmeren is gericht op functies en het mappen van deze functies op ingegeven 'stellingen'.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
1
2
3
| { x < 0 : -x
f(x) = { x=0: 10
{ x > 0: x |
Sinds wanneer is dit Haskell??? (misschien loop ik achter hoor) Bedoel je nietZoijar schreef op 13 oktober 2004 @ 11:55:
Je hele programma is 1 functie. En dan heb je wel functies met een andere definitie op een ander domein. Je weet wel, met van { haken.
code:
1 2 3{ x < 0 : -x f(x) = { x=0: 10 { x > 0: x
1
2
3
| f x | x < 0 = -x
| x == 0 = 10
| otherwise = x |
Verwijderd
Je kunt niet zeggen x = 10 en dan later x = 15;
áls je in Haskell-taal zou beweren dat x 10 is, dan blijft x ook 10.
Het hele idee van als x 10 is (if-statement) is daarmee van de baan. Net zoals een for-lus.
Waarom geen toekenningsoperator? Omdat je als je in Haskel programmeerd wil dat alles bewezen klopt. Dat kan niet als je dingen zomaar kan toewijzen.
Wat het volgende doet:
1
2
3
4
| abslist :: [Int] -> [Int]
abslist list = map abs list
where abs x | x < 0 = -x
| otherwise = x |
Is een lijst van integers binnenkrjigen en een andere lijst van integers opleveren.
Bji Haskell kun je (mits het hetzelfde is als clean):
type matchen (zie hierboven). Dat is een soort if-statements idee (al mag je met haskell woorden als if en for nooit in de mond nemen ! ). Als x < 0 dan -x anders x.
Je kan lazy programmeren:
[1..] is een lijst getallen van 1 tot oneindig.
Je kan recursie toepassen. Gooi output van de functie opnieuw in de functie en plak het resultaat er aan vast (zoek op recursie in google). (dit gedeelte zou je misschien heel voorzichtig mogen vergelijken met een for-lus)
En je moet voor je presentatie ook nog even uitzoeken wat ZF-expressies zijn.
Succes
[ Voor 4% gewijzigd door Verwijderd op 13-10-2004 13:58 ]
Niet dat ooit iemand zoiets zou willen gebruiken
Trouwens, zoek eens snel naar het artikel "Why functional programming matters" van J. Hughes. Hij geeft aan waar FP om draait. Hij gebruikt welliswaar geen Haskell, ik dacht van Miranda, maar dat maakt niet zoveel uit.
[ Voor 61% gewijzigd door Infinitive op 13-10-2004 14:09 ]
putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]
Een functionele taal is net als een excelblad vol met formules. En alle waarden staan in een bepaalde stand. Als je op één punt een waarde aanpast kan de hele berekening veranderen. Zo werkt een functionele taal dus (ook). je hebt derhalve geen loopjes een dubbele toewijzingen etc.
Koop of verkoop je webshop: ecquisition.com
[rml][ Tutorial] Haskell part 1[/rml]
[rml][ Tutorial] Haskell part 2[/rml]
Pres. cijfer was een 8.7 Btw
Nu willen wij graag wel die presentatie van jouw zien! Kijken of 'ie echt wel een 8.7 waard isjvaneijk schreef op 15 oktober 2004 @ 15:56:
Heej mensen bedankt voor de goede voorlichting alles is goed verlopen en vooral die tutorials van Glimi had ik wat aan
putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]
Leuk om te lezenjvaneijk schreef op 15 oktober 2004 @ 15:56:
Heej mensen bedankt voor de goede voorlichting alles is goed verlopen en vooral die tutorials van Glimi had ik wat aan![]()
Pres. cijfer was een 8.7 BtwTXN all