[Allegro] Unterprogramme: #cc bleibt nicht konstant

Thomas Berger ThB at Gymel.com
Sa Feb 19 16:39:05 CET 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Liebe Frau Koczian,

>>> Im Gegensatz zur Aussage im Handbuch (10.2.6.2, Sonderkategorien) scheint also
>>> #cc seinen Wert nicht zu behalten, wenn im Unterprogramm zuerst andere
>>> Kategorien benutzt werden.
>>
>> "benutzt" wohl nicht, aber das Belegen von Anwendervariablen
>> (und auch das Manipulieren von echten Kategorien) ist m.E.
>> ~manchmal~ problematisch. Eine Regel habe ich eigentlich nie
>> gefunden, vermutlich haengt das Verhalten von den realen
>> Verschiebungen im Aufnahmespeicher ab (die sind im Fall von
>> =Y~ und =Z~ natuerlich maximal, weil Inhalte angefuegt
>> werden)
>>
> 
> Belegen von Anwendervariablen und Manipulieren von echten Kategorien innerhalb
> des Unterprogramms? Ich habe jetzt mal #cc durch die Anwendervariable ersetzt,
> mit der das Unterprogramm aufgerufen wird, das ist in diesem Fall kein Problem.
> Aber was wäre der generelle Rat zu diesem Thema? #cc entweder nicht verwenden
> oder _sofort_ in eine Anwendervariable stecken und dann nur noch die benutzen?

In der Praxis ist beides ganz natuerlich:

Grund fuer Unterpogramme ist ja oft "nur", dass eine komplexe Operation
nicht in einer Zeile abgehandelt werden kann, etwa weil Spruenge oder
Schleifen noetig sind: Hier wird dann der Arbeitstext allmaehlich abgearbeitet
oder aufgegessen.

#cc ist ja mitnichten die Aufrufkategorie des konkreten Unterprogramms #(x,
es kann nicht nur als #>x aufgerufen worden sein so dass #cc keine Bedeutung
hat, sondern aus einem Unterpogramm #(y heraus, dann spiegelt #cc immer
noch den Aufrufkontext des zeitlich vorangehenden >y wieder, das kann zu
boesen Ueberraschungen fuehren, wenn man ein komplexes Unterpgrogramm an
anderer Stelle nachnutzen will und den Aufrufkontext nicht mehr im Auge hat.

Fast alle meine "gewachsenen" Unterprogramme beginnen inzwischen so:

#(x
#ucc +#J00 Z         % #ucc bereits belegt
#cc Acc
#J00

...
  [und hier wird normalerweise dann sichergestellt, dass #ucc leer ist,
  um spaetere Aufrufe dieses oder anderer Unterprogramme, die #ucc nutzen
  zu vereinfachen]
#)x

viele Gruesse
Thomas Berger


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iJwEAQECAAYFAk1f5BkACgkQYhMlmJ6W47NxzQP/WPpOaNr5FyGN+osKIfkjR9rO
Cmpp+y90DUKWh4W5NXlWnV8Sx4t8KsE1n+pp0k8dqwt1M8vuwgIEr1h6KiZqKrKE
CPgI1eurr34FWIkbdlhtTpTXD8b9o6PflgV6vAvw00XmuciYGADeDaTcUW+wFuic
uAe4HDi+6qi/egdukuw=
=89mB
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro