Schrift
[thread]12838[/thread]

Verständnisfrage Datentypen (Array/Hash/literale "Listen") (Seite 3)

Leser: 5


<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten
betterworld
 2008-12-02 00:23
#116774 #116774
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
LanX-+2008-12-01 20:10:57--
Ich kanns dir ehrlich nicht 100%ig sagen

Genau darauf wollte ich ja eigentlich hinaus, dass man es hier nicht so genau sagen kann.

Quote
Zudem heißt der opcode für "=" hier jedesmal aassign und nicht "list assign".

Das ist wohl wieder einer dieser Fälle, dass selbst die Autoren nicht (von Anfang an) eine Unterscheidung zwischen Arrays und Listen im Kopf hatten, so wie auch bei wantarray. Im perldoc heißt es jedenfalls "list assignment", darueber steht in perlop und perldata ein bisschen.
murphy
 2008-12-02 01:36
#116776 #116776
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
LanX-+2008-12-01 20:10:57--
[...]
Ich finde an der Diskussion bei perlmonks abstrus, dass mit "das ist so weil die opcodes oder der c-code so und so aussehen" argumentiert wird und dabei sowas wie der versuch einer Abstraktionsebene oder Spezifikation ganz aufgegeben wird.
[...]


Ich wüsste nicht, wie man anders als durch die Analyse von Experimenten und des Interpreterquellcodes vernünftige Aussagen über die Verhaltensweise von Perl 5 gewinnen sollte, da eine Spezifikation dieser Sprache nicht existiert und die Dokumentation ebenfalls nicht vollständig vor der Implementation erstellt wurde.
When C++ is your hammer, every problem looks like your thumb.
LanX-
 2008-12-02 01:50
#116777 #116777
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
les dir mal die Diskussion durch ob ($a) eine einelementige Liste beschreibt http://perlmonks.org/index.pl?node_id=726890

Die auf Opcodes gestützte Gegenaussage ist: "Nein, die Klammern tun nur Klammern und gegebenenfalls von rechts eine Listenzuweisung erzwingen! Es braucht nicht solcher vereinfachter Aussagen"
betterworld
 2008-12-02 04:53
#116778 #116778
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
LanX-+2008-12-02 00:50:46--
les dir mal die Diskussion durch

Liiiiiiiiiiiiiiiiiies! ;-)
Quote
ob ($a) eine einelementige Liste beschreibt http://perlmonks.org/index.pl?node_id=726890


($a) ist eben nicht immer eine Liste. An vielen Stellen ist es auch einfach nur ein Skalar:
Code: (dl )
1
2
3
4
scalar(($a));
($a)*(1+2);
($a)->();
$scalar = ($a)x42;

In keinem der obigen Fälle ist $a im Listenkontext. Das kann man auch experimentell herausfinden, wenn man $a durch etwas ersetzt wie etwa einen Aufruf einer Funktion, die wantarray ausgibt.

In anderen Fällen ist es im Listenkontext:
Code: (dl )
1
2
3
($a)[0];
($a)=(0);
@array = ($a)x42;


Der Schluss daraus ist, dass es eben immer vom jeweiligen "Konstrukt" abhängt, ob die Klammern eine Extra-Bedeutung haben. Da Klammern intuitiv ein bisschen nach Liste aussehen, haben sie in den obigen Konstrukten eben die Sonderbedeutung, dass sie eine Liste (oder einen Listenkontext) erzeugen. Und ob man nun "Konstrukt" oder "Opcode" sagt, das kommt wohl in diesen Fällen aufs selbe hinaus. "Konstrukt" wäre etwas abstrakter (soll heißen: Mehr auf Perl-Niveau als auf C-Niveau), und ich gebe Dir recht, dass es, um über eine Sprache zu reden, angemessener ist, abstrakte Beschreibungen zu geben, solange sie zutreffen.

edit: noch das "@array = " zu dem Beispiel mit dem x-Operator dazugeschrieben, denn das ist auch wichtig, dass das ganze im Listenkontext steht
LanX-
 2008-12-02 12:26
#116779 #116779
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Ei Bub, les dir des mal genau dursch, un pass uff! ;)

ich sage nicht das $a im Listenkontext ist, sondern dass man ($a) *insgesamt* als einelementige Liste begreifen kann, so wie () und (1,2) als 0 bzw 2 elementige Liste.

Alle deine Scalarbeispiele machen mit Listen entweder keinen Sinn oder du erzwingst den scalaren Kontext, schreib mal alternativ eine "anerkannte" Liste wie (1,2) hin und schau was passiert...

Und auf der linken Seite einer Zuweisung erzwingt ($a)= einen Listenkontext, genau wie ()= und (1,2)=. (*)

Man kann also m.E. sehr wohl ($a) als einelementige Liste begreifen, die den gleichen Einschränkungen unterliegt wie n-elementige Listen. Solange mir niemand einen Code zeigt wo sich "($a)" wesentlich anders verhält als "($x,$a)" halte ich die These aufrecht.



(*) übrigens was ziemlich krank ist, ist folgendes Beispiel ($x=$y)=wa(), das letzte = ist ein arrayassign wg der Klammern, dass heißt wa() wird mit wantarray aufgerufen ...
betterworld
 2008-12-02 16:30
#116781 #116781
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
LanX-+2008-12-02 11:26:28--
Ei Bub, les dir des mal genau dursch, un pass uff! ;)

Ist das Verb zu stark, bist Du zu schwach ;)
Quote
ich sage nicht das $a im Listenkontext ist, sondern dass man ($a) *insgesamt* als einelementige Liste begreifen kann, so wie () und (1,2) als 0 bzw 2 elementige Liste.

Ich weiss nicht mehr so genau, was genau Du unter "Liste" eigentlich verstehst?

Jedenfalls ist 3*(1,2) auch 6, und es liegt keine Liste vor, sondern ein skalarer Komma-Operator.
LanX-
 2008-12-02 17:26
#116783 #116783
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
betterworld+2008-12-02 15:30:23--
Jedenfalls ist 3*(1,2) auch 6, und es liegt keine Liste vor, sondern ein skalarer Komma-Operator.


Rischtisch!!! 8 )

Definition: Eine "Klammerungs-Gruppe" ist ein in Parens () geklammerter Codebereich.

These:

Wann immer eine Klammerungsgruppe mit Komma - also ($a,$b,$c) - eine Liste ist, ist sie auch ohne Komma - ($a) - äquivalent zu einer Liste.

Und in den Fällen, wo ein skalare Kommaoperator gilt, ist das Verhalten ohne Komma äquivalent.

Beispiel:
also 3 *(1,2,3) == 9 ; 3* (1,2) == 6 ; 3*(1) =3 ; 3 * () =0

Nochmal anders formuliert, wenn ich in funktionierendem Code eine 2 elementige Gruppe auf eine verkürze, ändert sich nix an der Interpretation!
betterworld
 2008-12-02 18:22
#116788 #116788
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
LanX-+2008-12-02 16:26:02--
Nochmal anders formuliert, wenn ich in funktionierendem Code eine 2 elementige Gruppe auf eine verkürze, ändert sich nix an der Interpretation!

Da wuerde ich Dir zustimmen.
LanX-
 2008-12-02 19:04
#116790 #116790
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
DANKE! 8 )
tschloss
 2008-12-02 21:48
#116795 #116795
User since
2008-04-21
30 Artikel
BenutzerIn
[default_avatar]
Huch - da macht man nichts Böses ahnend einen Thread mit einer Anfängerfrage auf, bekommt geholfen und sieht Tage später welche Satansbrut sich aus dem harmlosen Samen entwickelt hat...
;)

VG Thomas

Ihr seid schräg drauf - bei euch gefällt mir es...
<< |< 1 2 3 >| >> 30 Einträge, 3 Seiten



View all threads created 2008-11-29 13:20.