Ich finde, dass eine der interessantesten Eigenschaften von Haskell und Perl6 die Möglichkeit ist, Rechenwerte aufzuschieben, bis sie tatsächlich benötigt werden.Beispiele für faule Auswertungstechniken in Perl 5?
Perl5 auf der anderen Seite mag alles sofort zu tun, aber von dem, was ich sagen kann, enthält alle notwendigen Primitiven für die faule Bewertung. Das sind:
- einen Verweis auf
@_
in einem Unterprogramm erstellt ein Array Referenz genommen wird, die den Bezeichner in der Argumentliste aliased ist, auch wenn einige dieser Kennungen noch keine Werte enthalten. - überladene/gebundene Objekte von solchen Unterprogrammen zurückgeben, die intern
\@_
enthalten, und dann bei Bedarf deneferenzieren. (Und es gibt verschiedene CPAN-Module, die abstrahieren die tie/Überlastung Details)
Ich habe mit verschiedenen faulen Programmiertechniken in Perl zu experimentieren (Ich habe ein Modul in den Werken, die ein gutes Stück von der Haskell implementiert Prelude in Perl5 (Dinge wie Co-Rekursion: zur Definition der Fibonacci-Sequenz funktionieren bereits)). Aber ich habe das Gefühl, dass sich im Code versteckte Fehler verbergen, die sich zeigen können, wenn die Funktionen in größeren Ausdrücken/Programmen verwendet werden.
Also frage ich mich, ob es irgendwelche guten Beispiele (CPAN/blogs/books) gibt, von denen jemand weiß, dass sie Haskell/Perl6 wie Faulheit in Perl5 benutzen? Insbesondere würde ich gerne einen Code von signifikanter Größe durchlesen, der diese Art von Faulheit anwendet.
Ich möchte auch daran interessiert zu wissen, ob jemand in irgendwelche gotchas oder unlösbare Probleme laufen hat die Umsetzung lazy evaluation in Perl Umgebung 5.
Ich nehme an, dass Sie Higher Order Perl gelesen haben. Es enthält eine Menge Material über Iteratoren, unendliche Ströme und Faulheit. –