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 -