[HASKELL] For lus bestaat het?

Pagina: 1
Acties:

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
Beste tweakers..

Ik moet voor mijn opleiding een presentatie houden over Haskell..

Nu ben ik op zoek naar een for lus tenminste als dat bestaat in HASKELL ik heb me helemaal rot gezocht maar kan nergens iets vinden...

iRacing Profiel


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
In Haskell is er geen for-lus zoals je die kent van Java, C of Delphi. For-lussen zijn niet Haskellig :).
In Haskell kun je wel hetzelfde bereiken met de functie map. Deze past een bepaalde functie toe op ieder element van de meegegeven lijst.
Haskell:
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).

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
bestaan er wel ergens IF functies enzo?
of do while

iRacing Profiel


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
jvaneijk schreef op 13 oktober 2004 @ 11:43:
bestaan er wel ergens IF functies enzo?
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.”


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je moet een presentatie houden over haskell, maar je weet niets van het idee van een functionele programmeer taal??

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

heel sipel voorbeeld, zal wel niet helemaal kloppen want ut is amanda ipv haskell maar het idee is hetzelfde.

code:
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...

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
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?

iRacing Profiel


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:47

Creepy

Tactical Espionage Splatterer

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?
De functioneel van functionele talen doelt niet op "functies en procedures" ;)

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


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:05

Janoz

Moderator Devschuur®

!litemod

Nee, niet procedures, maar functies. Functioneel programeren is fundamenteel anders datn imperatief. Je hebt bij Haskell dus niet die imperatieve controle structures als if then else do while ed. Daarnaast heb je in Haskell ook niet variabelen zoals je die uit andere type talen kent.

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'


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

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

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Zoijar 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
Sinds wanneer is dit Haskell??? (misschien loop ik achter hoor) Bedoel je niet
code:
1
2
3
f x | x < 0 = -x
    | x == 0 = 10
    | otherwise = x

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik bedoel een wiskundige functie :) Hoe je het syntactisch opschrijft boeit niet echt...haskell, gofer, miranda, blah :)

Verwijderd

Je kunt niet zomaar dingen toewijzen in Haskell.

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:
code:
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 ]


Verwijderd

linkje.
Clean lijkt heel erg op Haskell.

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Als je een for lus wilt... met de IO monad kan je er een maken... inclusief declaraties en assignments.
Niet dat ooit iemand zoiets zou willen gebruiken O-)

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]


  • mocean
  • Registratie: November 2000
  • Laatst online: 30-03 18:32
Iedereen kent het principe wel, maar dan onbewust.

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


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 11-03 09:53
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 Btw :D TXN all

iRacing Profiel


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
jvaneijk 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 ;)
Nu willen wij graag wel die presentatie van jouw zien! Kijken of 'ie echt wel een 8.7 waard is })

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
jvaneijk 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 Btw :D TXN all
Leuk om te lezen :) Dank je wel :)
Pagina: 1