Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Tode am 11.04.05 - 09:51:32
-
Probiert mal folgendes simpelstes Formelbeispiel bei Euch aus.. Ihre werdet überrascht sein...
a := 1 : 2 : 3;
b := -10 : -20 : -30;
x := a ** b;
@Prompt( [OK] ; "ERGEBNIS" ; @Implode( @Text( x ) ) );
Für die, die es nicht selbst probieren wollen..
Erwarten würde man bei einer permutierten Multiplikation folgendes:
a1 * b1 ; a1 * b2 ; a1 * b3 ;
a2 * b1 ; a2 * b2 ; a2 * b3 ;
a3 * b1 ; a3 * b2 ; a3 * b3 ;
also:
-10 ; -20 ; -30
-20 ; -40 ; -60
-30 ; -60 ; -90
Heraus kommt:
-10 ; 20 ; -30
-20 ; 40 ; -60
-30 ; 60 ; -90
Erklärung (nachgeprüft):
Notes zerlegt offensichtlich intern die zweite Liste in zwei Bestandteile:
bI := 10 : 20 : 30;
bII := -1 : -1 : -1;
und die Multiplikation sieht dann so aus:
a1 * bI1 * bII1 ; (sieht OK aus)
JETZT KOMMT DER HAMMER:
a2 * bI2 * bII1 * bII2
a3 * bI3 * bII1 * bII2 * bII3
Prüft es nach, das ist mit jeder beliebigen Zahlenliste zu beweisen...
Gruß
Tode
-
Mein Notes (6.5.3) kann Mathe:
Ergebnis:
-10
-20
-30
-20
-40
-60
-30
-60
-90
Andreas
-
6.5.3 verwende ich auch... Deutsch oder englisch ?
Hast Du den Code kopiert oder abgetippt ?
Jetzt bin nämlich verwirrt...bei meinem Kollegen und mir funktioniert's bei beiden nicht...
(6.5.3 deutsch)
Danke für's ausprobieren...
Tode
-
Ich habe 6.5.3 deutsch.
Getestet mit einer Maske: Feld "A" (Mehrfachwerte, Zahl), Feld "B" (Mehrfachwerte, Zahl) und Feld "Erg" (Mehrfachwerte, Zahl) mit der Formel (Eingabeumsetzung)
A ** B
A = 1 : 2 : 3;
B = -10 : -20 : -30;
Andreas
-
Dein Ansatz hat mich auf den richtigen Pfad gebracht.
Gib einfach für Dein Feld B mal folgenden Vorgabewert an:
-10 : -20 : -30
und öffne dann die Maske...
Siehe da: im Feld steht: -10 : 20 : -30
Das selbe passiert wohl in Formeln, wenn man Werte so zuweist:
b := -10 : -20 : -30;
@Prompt( [Ok] ; "TEST" ; @Implode( @Text( b ) ) )
ergibt als Prompt: -10 20 -30
Lösung:
b := (-10) : (-20) : (-30);
@Prompt( [Ok] ; "TEST" ; @Implode( @Text( b ) ) )
Offensichtlich interpretiert Notes also negative Mehrfachwerte, die man per Formel zuweist, einfach falsch.
Danke Dir für die Hilfe. Problem gelöst...
Tode
-
Übersehen wir hier irgendeinen Umstand ? Bewirkt die Kombination aus Doppelpunkt und Minus irgendwas ? Ich kann da aber nichts erkennen.
Was mich aber stutzig macht: In R5 erhält man das gleiche Resultat.
Bernhard
-
Das Verhalten ist in der Designer Hilfe beschrieben:
The list concatenation operator (:) concatenates values into a list. The values must all be of the same type. This example is a three-member text list.
"London" : "New York" : "Tokyo"
The values can be constants, variables, and expressions, including other lists.
LNY := "London" : "New York";
LNY : "Tokyo"
Since list concatenation has the highest precedence next to subscripts, list elements that are expressions must be in parentheses. In the following example, the minus sign has the unintended effect of applying to both the third and fourth elements of the second list.
1:2:3:4 + 1:2:-3:4 = 2:4:0:0
Use parentheses to make the minus operation apply only to the third element of the second list.
1:2:3:4 + 1:2:(-3):4 = 2:4:0:8
Ich habe es in R4 getestet: Auch da ist es so.
Ergo: Lieber immer eine Klammer mehr als eine zuwenig!
Andreas
-
Danke Dir für den Hinweis auf die Notes- Hilfe... Da habe ich mal wieder nen Bug gefunden.... der keiner ist.
Gut zu wissen.
Gruß
Tode
-
Abgesehen davon, Klammern zu verwenden (lieber einmal öfter als einmal zu wenig, wie Glombi schon schrieb) - alles erklärt die DesignerHelp hier nicht: Warum speichert Notes in einem Feld
-10
20
-30
-40
-50
-60
wenn der Vorgabewert doch
-10
-20
-30
-40
-50
-60
lautet ? Das ist m.E. schon ein Bug - ein uralter, wie es scheint. Und irgendwie ists wohl ein IDE-Fehler und noch nicht die Formula engine, denn diese wurde ja neu geschrieben für R6.
Bernhard
PS: Was ich gerade sehe - und jetzt wird der Hund in der Pfanne verrückt:
-10
(-20)
-30
-40
-50
-60
als Vorgabewert ergibt
-10
20
30
-40
50
-60
Eine Klammer killt drei Vorzeichen (R5.0.8)
-
Auch dieses Verhalten wird -entgegen Deiner Aussage- durch die Hilfe erklärt:
Das Vorzeichen ist "gewichtiger" als die Listenverknüpfung ( : )
Das heisst:
Ohne Klammer werden alle Vorzeichen quasi für die nachfolgenden Zahlen "kummuliert":
-10
(-20)
-30
-40
-50
-60
als Vorgabewert ergibt
-10 (ein Vorzeichen)
20 (2 Vorzeichen: das von -10 und das von -20 )
30 (2 Vorzeichen: das von -10 und das von -30, das von -20 wurde ja geklammert und gilt daher nicht für die folgenden Zahlen )
-40 (3 Vorzeichen: -10 , -30 , -40 : MINUS mal MINUS mal MINUS = MINUS )
50 (4 Vorzeichen: -10 , -30 , -40 , -50 )
-60 ( 5 Vorzeichen: -10 , -30 , -40 , -50 , -60 )
Gruß
Tode
-
Ja, natürlich - das ist logisch. Danke für den Hinweis, Torsten.
Bernhard