DMUG-Archiv 2019

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

[Dmug] Infirmis proceduralis

Sali zusammen,

aus der Liste von Paaren edges

In[28]:= edges

Out[28]= {{2, 4}, {8, 2}, {5, 8}, {7, 5}, {9, 7}, {1, 9}, {4, 1}}

In[43]:= chainIt[edges]

Out[43]= {{2, 4}, {4, 1}, {1, 9}, {9, 7}, {7, 5}, {5, 8}, {8, 2}}


soll die verkettete List  l[[n-1, 2]] = l[[n,1]] werden, wie im Beispiel zu sehen. Die Funktion chainIt[] ist prozedural


Clear[chainIt]
chainIt[l_List?ArrayQ] := l /; Length[l] == 1
chainIt[l_List?ArrayQ] := Block[{r = {l[[1]]}, l0 = Rest[l], x},
   If[Length[Complement @@ Transpose[l]] != 0,
    Print["Cannot chain these pairs: ", l];
    Return[$Failed]
    ];
   While[Length[l0] > 0,
    x = Select[l0, #[[1]] == Last[r][[2]] &];
    If[Length[x] > 1,
     Print["Second element ", Last[r][[2]], " not unique in first entries. Bye."];
     Return[$Failed]
     ];
    r = Join[r, x];
    l0 = Complement[l0, x]
   ];
   r
] /; Dimensions[l][[-1]] == 2 && Length[l] > 1


es sollte mit SortBy[] gehen, aber wie? Dieses Ergebnis ist unverständlich:


In[60]:= Clear[fct]
fct[l1_List, l2_List] := If[l1[[2]] == l2[[1]], True, False]
SortBy[edges, # &, fct]

Out[60]= {{2, 4}, {4, 1}, {1, 9}, {9, 7}, {8, 2}, {7, 5}, {5, 8}}

{8,2} steht falsch drin ... es gehört an das Ende der Ergebnisliste.


Sieht jemand ein funktionales chainIt[] und mag es mitteilen?


grüsse

Udo.

_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html

Antworten:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html