Italia
Foro

Unter-Proc erkennt globale Variablen nicht?

 
XPSE kann im 1. Proc global termine Variablen erkennen. Ruft die Proc aber eine andere Proc auf, folgt die Warnung "Varibale undeklariert". Ein anderes Produkt mit X vorne motzt hier nicht. Mach ich was falsch?
 
20.01.2012  
 



Ach so ja: Hier das Ding das mit XPSE nicht will. Ich würde es ja später aber gern mit nProcs beschleunigen, aber wenn's so schon nicht klappt?
KompilierenMarkierenSeparieren
WindowTitle "Lexikographisch aufsteigende Permutationen eingegebener Wortstrings"
Font 2:randomize:cls rnd(8^8)
print " Trenner = Leerzeichen oder |, Durch negative Zahlen"
print " (zB. -9) werden Indexfolgen 0|1|2|3|4|5|6|7|8 permutiert."
print
' Interpreter: 9 Elemente 362880 mal permutiert in 148.81 Sek (ohne Ausgeben)
' XPIA:                       - '' -            in  28.55 Sek
' ProfComp                                      in  27.33 Sek
' $MAKE CLE
 {$cleq}
Declare t$,z&,tt$[],n&,tm&,ts$
var ausgeben%=0
Restart:
print " Zu permutieren (Leer oder | als Trenner):\n\n ";
input t$
t$=trim$(t$)
t$=translate$(t$,"  "," ")
case instr("|",t$):q$="|"
t$=translate$(t$," ","|")

if val(t$)<0

    setSize tt$[],-1*val(t$)
    tt$[]=str$(&Index)

else

    tt$[]=explode(t$,"|")

Endif

n&=SizeOf(tt$[])

if n&<2

    z&=0
    Goto "Skip"

endif

cls rnd(8^8)
print " Permutation läuft..."
tm&=&gettickcount
z&=PERM()' PERM ruft DOSOMETHINGWITHRESULTS auf!
' und verwendet dann NEXTPERM
tm&=&gettickcount-tm&
cls
print
ts$=" In "+str$(tm&)+" ms"
Skip:
ts$=ts$+" "+str$(z&)+" Permutationen erzeugt."
ClearClip
PutClip ts$
Print ts$
Print " Benchwerte in Zwischenablage verfügbar."
beep
WaitInput
CLS rnd(8^8)
Goto "Restart"
End

Proc DOSOMETHINGWITHRESULTS

    ' Hier: Ausgeben
    casenot ausgeben%:return
    case %csrlin>21: locate 1,1

    WhileLoop n&

        print tt$[&Loop-1];
        case &Loop=n&:continue
        print q$;

    EndWhile

    print

EndProc

PROC PERM

    Declare k&,j&,u&,v&,e%,z&,q$
    e%=1
    z&=0
    q$="|"

    While e%

        inc z&
        DOSOMETHINGWITHRESULTS
        NEXTPERM

    EndWhile

    return z&

ENDPROC

proc NEXTPERM

    'erzeugt die jeweils nächste lexikalische Permutation
    k&=n&-2

    While tt$[k&]>=tt$[k&+1]

        Dec k&
        case k&<0:break

    EndWhile

    if k&<0

        e%=0

    else

        j&=n&-1

        While tt$[j&]<=tt$[k&]

            dec j&

        EndWhile

        t$=tt$[k&]
        tt$[k&]=tt$[j&]
        tt$[j&]=t$
        u&=k&+1
        v&=n&-1

        While u&<v&

            t$=tt$[u&]
            tt$[u&]=tt$[v&]
            tt$[v&]=t$
            inc u&
            dec v&

        EndWhile

    href='./../../function-references/xprofan/endif/'>endif

endProc

 
20.01.2012  
 



XPSE kann etwas das XProfan selbst nicht macht: Lexikalische Variablen Sichtbarkeit (  [...]  )

So ist danach folgendes potentiell falsch:
KompilierenMarkierenSeparieren
jedoch richtig:
KompilierenMarkierenSeparieren
Sowieso, nProcs sind da sogar noch ein Stückchen strenger da dort überhaupt keine Variablensichtbarkeitsvererbung existiert auch damit nProcs immer Thread-Sicher sind. So gibts in nProcs absichtlich nur die darin deklarierten und als Parameter und per Global deklarierten Variablen aber keine aus anderen nProcs oder Procs.

PS: Codes bitte in Code-Tags setzen.
 
20.01.2012  
 




Nico
Madysa
Ich war so frei, es der Leserlichkeit zu liebe zu bearbeiten.
 
20.01.2012  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

2.987 Views

Untitledvor 0 min.
Pk24.02.2017
Joerg22.04.2016
Erasmus.Herold03.04.2016
Ernst30.04.2014
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

unbekannt (2x)
Nico Madysa (1x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie