On 25.07.2010, at 04:21, R. Baumann wrote: > Im "Welcome workspace" von Squeak 4.1 lesen wir: > > "Squeak 4.1 includes the closure implementation from Cog as a prerequisite > for full Cog adoption later. With this implementation Squeak finally has > 'full' closures, allowing classic recursive examples ...". > > Betrachten wir folgendes Beispiel (Summe der echten Teiler einer Zahl):
Dieses Beispiel funktioniert auch ohne "full closures", da der Block nicht mehrfach ausgewertet wird. > teilersumme := [:zahl | |p g s | > p := 2. g := zahl // 2. s := 1. > [p < g] whileTrue: [ > p * g = zahl ifTrue: [s := s + p + g]. > p := p + 1. g := zahl // p. > ]. "Ende whileTrue" > p * p = zahl ifTrue: [s := s + p]. > ^s]. "Ende Teilersumme" > > ts := teilersumme value: 1024. > ts (Strg-P) liefert 1023 (korrekt!) > > Aber Transcript show: ts (Strg-D) liefert nichts (das Transcriptfester > bleibt leer) - nicht mal eine Fehlermeldung! > > Was soll man davon halten? Wer ist hier zuständig? Der Autor des Bespiels - überflüssigerweise wurde ein "non-local return" in den Block eingefügt. Korrekt wäre "s" statt "^s". Das return bewirkt, dass das DoIt an der Stelle abgebrochen wird. > wen (von der internationalen Entwicklergemeinschaft) kann man diesbezüglich > ansprechen? Alle: http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-dev - Bert -
