[Squeak-ev] Hat Squeak 4.1 wirklich "full closures"?

Bert Freudenberg bert at freudenbergs.de
Son Jul 25 16:33:53 UTC 2010


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 -