Thread Funktionale Programmierung in Perl (10 answers)
Opened by neniro at 2008-12-19 23:29

murphy
 2008-12-23 16:25
#117415 #117415
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Anmerkung: In der funktionalen Welt werden oft auch Dinge, die ein Perlprogrammierer eher mit for oder while loesen wuerde, als rekursive Funktionen geschrieben. Kommt man in Perl mal in Versuchung, auch so etwas zu machen, zum Beispiel weil man keine ganz einfache Schleife hat, sondern zwei oder mehr Subroutinen, die sich gegenseitig aufrufen, dann sollte man beachten, dass bei tiefer Rekursion schon mal der Stack ueberlaufen kann oder Perl zumindest eine Warnung ausspuckt. Zum Glueck kann man aber viele rekursive Funktionen so schreiben, dass der rekursive Aufruf direkt mit dem return-Statement gekoppelt ist (sub foo { ...; return foo(...); }). In so einem Fall ist das anlegen zusaetzlicher Stackframes fuer den Aufruf eigentlich unnuoetig und manche Programmiersprachen optimieren so einen Aufruf direkt zu einer Schleife im Maschinencode, aber in Perl kann man sich mit folgendem Konstrukt behelfen: sub foo { ...; @_ = ...; goto &foo; }. Macht man das so, wird der Stack dadurch nicht weiter gefuellt.

Uebungsaufgabe: Die Fakultaetsfunktion aus neniros Beitrag ist nicht in dieser "endrekursiven" Form geschrieben, da der Aufruf zu g innerhalb eines anderen Ausdrucks erfolgt. Es ist aber moeglich, sie in die endrekursive Form umzuschreiben...
When C++ is your hammer, every problem looks like your thumb.

View full thread Funktionale Programmierung in Perl