[F#] Vraagje i.v.m. pipelines

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Hyperz
  • Registratie: Augustus 2009
  • Laatst online: 09-07 02:45
Hoi :).

Ik ben onlangs begonnen met F#. Vooral omdat het multi-threading een behoorlijk stuk makkelijker maakt. Nu zit ik met een vraagje waar ik niet direct een antwoord voor kan vinden.

Voorbeeld:
F#:
1
2
[| 1 |]
|> Array.append [| 2; 3 |]


Dat returned dus deze array: [| 2; 3; 1 |]
Nu vraag ik me af of er een manier is om te kiezen langs welk argument van Array.append (of andere functies) er gepipelined word zodanig dat ik dus [| 1; 2; 3 |] krijg? Ik kan natuurlijk het voorbeeld omdraaien om dat resultaat te bekomen maar dat lijkt me nogal onhandig bij langere code. :/

Of misschien snap ik het concept niet helemaal?

Asus P8P67 EVO | i5 2500k (4.8 GHz) | Sapphire HD 7970 Vapor-X GHz Ed. | 8 GB DDR3 1600 | 1 TB HDD


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:05
De meeste functionele talen hebben wel een flip functie, die de parameters van een functie omwisselt. Zo niet, dan kun je die zelf wel definiëren à la:
code:
1
flip f x y = f y x

(Geen idee welke syntax daar in F# precies bij hoort.)

Als je dat maakt, kun je simpelweg (flip Array.append) aanroepen.

Acties:
  • 0 Henk 'm!

  • Hyperz
  • Registratie: Augustus 2009
  • Laatst online: 09-07 02:45
Bedankt voor de suggestie! Had nog niet zover gedacht. F# geeft zelf geen flip functie. Ik kon eentje maken maar na wat online voorbeelden te bekijken over pipelining heb ik een beter alternatief gevonden:

F#:
1
2
[| 1 |]
|> (fun arg -> Array.append arg [| 2; 3 |])


Als ik zo bekijk was het eigenlijk redelijk simpel. Misschien moet ik mijn boek maar eens helemaal uitlezen vooraleer ik begin met knutselen in F# hehe :+.

Asus P8P67 EVO | i5 2500k (4.8 GHz) | Sapphire HD 7970 Vapor-X GHz Ed. | 8 GB DDR3 1600 | 1 TB HDD


Acties:
  • 0 Henk 'm!

  • cfern
  • Registratie: Oktober 2009
  • Laatst online: 17:48
d:)b
Soultaker schreef op donderdag 07 januari 2010 @ 01:10:
code:
1
flip f x y = f y x

(Geen idee welke syntax daar in F# precies bij hoort.)
Toewijzen van waardes/functies gaat met let:
code:
1
let flip f x y = f y x

dus het voorbeeld wordt dan
code:
1
[|1|] |> flip Array.append [|2;3|]

wat dus eigenlijk neerkomt op
code:
1
flip Array.append [|2;3|] [|1|]

"I'd rather have a full bottle in front of me, than a full frontal lobotomy." (Tom Waits) | PoE


Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Als ik zo bekijk was het eigenlijk redelijk simpel. Misschien moet ik mijn boek maar eens helemaal uitlezen vooraleer ik begin met knutselen in F# hehe :+.
Vooral lekker knutselen met F#! Ik heb zelf met F# ervaren dat als je er alleen maar over leest het toch niet echt blijft hangen omdat het een totaal ander paradigme hanteerd t.o.v. imperatieve talen (lees C#, Java).

zaken als pipelining, function composition en al die andere coole dingen in functionele programmeertalen leer je toch beter imho door er veel mee te doen.

Mijn advies: stukje lezen, lekker freubelen, verder lezen, nog meer freubelen, etc...

[ Voor 3% gewijzigd door Laurens-R op 07-01-2010 23:44 ]