[haskell] functies

Pagina: 1
Acties:

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:56
Ik ben momenteel wat aan het programeren in Haskell, nu loop ik tegen een probleempje op.

Als ik 2 lijsten in een functie gooi, dan werkt het volgende script prima:
code:
1
2
3
invert lst k
  | countList lst == ((countList k) + 1)  = twoSom (k++['1']) lst
  | otherwise = invert (inverthelp lst) ('0':k)

Dit roep je dus zo aan: invert "1111" ""
en dan krijg je terug: "0001"

[notitie]Er zitten nog meer functies boven[/notitie]

Nu wil ik graag dat je deze functie ook kan aanroepen in de vorm: invert "1111"

Zonder de lege lijst erachteraan.

Weet iemand hoe je zoiets kan doen in Haskell?

Ik blijf er iig vrij nuchter onder....


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Moet je even wachten op mbravenboer :)

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:56
ok :-)

Ik blijf er iig vrij nuchter onder....


  • tomato
  • Registratie: November 1999
  • Niet online
Kun je een functie overloaden in Haskell?
Dus iets als:
code:
1
2
invert lst k   =   twoSom (k++['1']) lst
invert lst     =   invert (inverthelp lst) ("")

Ofzo, zal wel domme opmerking zijn aangezien ik nog nooit een functionele taal heb gezien, sorry dus alvast :+

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:56
ja, dat kan wel, maar dat wordt al gedaan door de code zelf.

Het probleem zit em nog steeds in de eerste keer dat je de functie oproept.

Ik heb het probleem nu op een hele andere manier opgelost, met meerdere subfuncties.

Ik blijf er iig vrij nuchter onder....


Verwijderd

Ik heb het nooit echt geprobeert, maar ik geloof niet dat je functies kan overloaden nee :( Maar inmiddels hebben Maarten en ik al een oplossing gevonden geloof ik :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan met behulp van "where" een functie maken die alleen binnen de huidige functie werkt. Dit is erg makkelijk, want zo kan je de initiele stap gebruiksvriendelijke maken en daarna gelijk de recursieve oplossing doorsluizen naar de functie in de where.

Ik hoop dat dat is wat je bedoelde :) .

De bovestaande functie is trouwens nogal inefficient en onlogisch. ++ moet je zo weinig mogelijk gebruiken, bovendien kan je hier ideaal gebruik maken van pattern matching. Ik begrijp eigenlijk niet precies wat de functie nu eigenlijk moet doen...Als je hem echter goed herschrijft lijkt die tweede parameter mij zowat overbodig. Kan je uitleggen wat de functie doet?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
maartenvdv: Ik heb het probleem nu op een hele andere manier opgelost, met meerdere subfuncties.
Dat is ook inderdaad de enige oplossing. Maar leg eens uit wat je wilt bereiken, want dit kan denk ik veel mooier :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1