Archief - [PROG]/ een gamekkelijke programmeer taal?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Hasdrubal

Legacy Member
Hale zei:
om nog even terug te komen op die haskell :

het interessante aan die taal is eigenlijk het achterliggende gedachtengoed/ paradigma : nl. functioneel programmeren. In functionele programma's bestaat alles uit functies en vooral : die functies vertonen geen side-effects. Wat wil dat zeggen : een functie doet niks anders dan een return value berekenen. Ze past geen argumenten aan, ze past geen globale variabelen aan, er wordt geen state bijgehouden, etc.
Dit leidt tot heel interessante eigenschappen. Zo zal voor een functie f voor een bepaalde variabele x gelden : f(x) = f(x).
Dit lijkt misschien logisch maar is het allesbehalve in een imperatieve taal. volgend stukje pseudo code maakt dit duidelijk :

Code:
global var i = 0;

functie f (int x) 
{
    i = i + 1;
    return x+ i;
}

als je nu f(x) tweemaal oproept met dezelfde x dan zal ze tweemaal een ander resultaat geven. In een functionele stijl/taal kan dit dus niet voorvallen aangezien je daar alleen de returnwaarde mag berekenen en niks anders aanpassen.
Hierdoor kan een compiler vanalles gaan optimaliseren
bv. het volgende stukje code :
Code:
y = f(x) + f(x)
kan vervangen worden door :
Code:
z = f(x)
y = z+z
zodat een mogelijk kostelijke functie oproep maar 1 keer uitgevoerd hoeft te worden.

een ander voordeel is dat je functies thread safe zijn. Je moet niet vanalles liggen synchronized maken zoals je in java zou doen want er is helemaal niets dat kan upf*cken als twee threads tegelijk dezelfde methode uitvoeren. Zulk een taal is dus uitermate geschikt om te parallelliseren.

Als laatste laat het ook toe om je code zogenaamd "lazy" uit te voeren. Een functie wordt pas geëvalueerd wanneer ze daadwerkelijk nodig is. Dit laat je bv toe om oneindige recursieve data structuren te definiëren (bv. oneindig doorlopende bomen ) omdat die niet volledig geëvalueerd worden. Dit is onmogelijk in imperatieve talen.
:)

dit is raar op een manier echt wel!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan