Italia
Wünsche und Anregungen

Wunsch: "Infinite" Rekursion auch per Funktionen

 
Seit XProfan-ohne-Grenzen ist es possibile eine schier unendliche Prozedurrekursion zur Abarbeitung zu bewegen.

Leider trifft das nicht auf eigene Funktionen zu, sondern nur auf Prozeduren.

Hierbei ist die Schreibweise entscheidend.
KompilierenMarkierenSeparieren
stürzt beispielsweise sehr schnell ab wogegen
KompilierenMarkierenSeparierenunendlich (grenzenFrei wie versprochen) abgearbeitet wird.

Ich kann mir vorstellen das Prf2CPP-Nutzer sowieso schon immer eine unendliche Prozedur/Funktionsrekursion abarbeiten lassen können. @Sebastian: Ist dem so?

Büdde verbessern Roland.

Hier noch ein sehr anschauliches und einfaches Beispiel per eine Füll-Funktion welche die Rekursion nutzt als Speicher.
KompilierenMarkierenSeparieren
CLS
USEPEN 0,0,0
RECTANGLE 1,1 - WIDTH(%HWND)-10,HEIGHT(%HWND)-10
LINE 10,10 - 200,20
LINE 200,20 - 50,300
LINE 50,300 - 100,50
LINE 100,50 - 10,10
ELLIPSE 300,200 - 500,400
F 120,100,GETPIXEL(120,100)
F 400,300,GETPIXEL(300,200)
PRINT bingo
WAITINPUT

proc F

    PARAMETERS X&,Y&,TOFILL&
    SETPIXEL X&,Y&,0

    IF GETPIXEL(X&+1,Y&)=TOFILL&

        F X&+1,Y&,TOFILL&

    ENDIF

    IF GETPIXEL(X&,Y&+1)=TOFILL&

        F X&,Y&+1,TOFILL&

    ENDIF

    IF GETPIXEL(X&-1,Y&)=TOFILL&

        F X&-1,Y&,TOFILL&

    ENDIF

    IF GETPIXEL(X&,Y&-1)=TOFILL&

        F X&,Y&-1,TOFILL&

    ENDIF

endproc


976 kB
Hochgeladen:13.02.2008
Downloadcounter148
Download
 
13.02.2008  
 




Sebastian
König
iF

Ich kann mir vorstellen das Prf2CPP-Nutzer sowieso schon immer eine unendliche Prozedur/Funktionsrekursion abarbeiten lassen können. @Sebastian: Ist dem so?

Nein, leider nicht - die Aufruftiefe ist momentan auf 32 begrenzt. Das hat mit dem Speicher-Management per den Paramter-Stack zu tun...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.02.2008  
 



Ich verstehe - und es ist sehr schade.

Zur 32: Erlaubte da Roland nicht eine deutlich höhere Rekursionstiefe?
 
13.02.2008  
 




Sebastian
König
iF
Ich verstehe - und es ist sehr schade.

Zur 32: Erlaubte da Roland nicht eine deutlich höhere Rekursionstiefe?


Da bin ich mir jetzt nicht sicher... ich dachte, ich hätte mich bei der Zahl an XProfan orientiert...

Die Einschränkung gibt es übrigens noch garnicht so lange, sondern erst seit ich festgestellt habe, dass es per den Parameter-Stack einen Unterschied macht, ob eine Prozedur als Befehl oder als Funktion aufgerufen wird. In dem Zusammenhang noch der Hinweis, dass die Grenze nur per die Funktions-Variante gilt - als Befehl ist die erlaubte Tiefe tatsächlich unendlich. EDIT: Also genau wie in XProfan, wie ich gerade sehe - mein Nachbau ist offenbar wirklich gut...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.02.2008  
 



Dieser Testcode gibt eine gewisse Auskunft: (unten die exe)
KompilierenMarkierenSeparieren
//Version:0.0.3
 {$cleq}
randomize
long i
cls
usepen 0,0,0
rectangle 1,1 - width(hwnd)-10,height(hwnd)-10
line 10,10 - 200,20
line 200,20 - 50,300
line 50,300 - 100,50
line 100,50 - 10,10
ellipse 300,200 - 500,400
f 400,300,getpixel(400,300)
f 120,100,getpixel(120,100)
f 400,300,getpixel(300,200)
print bingo
waitinput
end

f(long x,y,tofill){

    i+
    locate 1,20
    print i
    setpixel x,y,0
    case getpixel(x+1,y)==tofill : f(x+1,y,tofill)
    case getpixel(x,y+1)==tofill : f(x,y+1,tofill)
    case getpixel(x-1,y)==tofill : f(x-1,y,tofill)
    case getpixel(x,y-1)==tofill : f(x,y-1,tofill)
    i-nt color=#0000FF>}


EDIT: Code und EXE überarbeitet, es fehlte i- am Ende der Funktion f.

Mit dem neuen Code wird mir max 4.380 per i angezeigt.

977 kB
Hochgeladen:13.02.2008
Downloadcounter155
Download
 
13.02.2008  
 




Sebastian
König
Ok, die Zahl kann ich bestätigen. Tatsächlich finde ich in der XProfan-Aiuto Angabe per die maximale Aufruf-Verschachtelung, die 32 habe ich also wohl selbst gewählt... Schien mir irgendwie ein ganz guter Kompromiss zwischen Performance und Speicher-Verbrauch zu sein. Technisch wäre es kein allzu großes Problem, die Grenze abzuschaffen - ich muss nur mal schauen, ob und wie sehr die Geschwindigkeit darunter leiden würde...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.02.2008  
 




Sebastian
König
Noch ein Nachtrag...

Beim Betrachten meines eigenen Codes sehe ich gerade, dass die erlaubte Tiefe im Prinzip  in Profan2Cpp doch unendlich ist. Ab der 33. Ebene verhält sich der Stack bei einem Aufruf als Funktion allerdings dann genauso wie bei einem Aufruf als Befehl. Soll heißen: der übergeordnete Stack wird dann weiter benutzt....
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.02.2008  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.267 Views

Untitledvor 0 min.
Jörg Sellmeyer12.05.2018

Themeninformationen

Dieses Thema hat 2 subscriber:

Sebastian König (4x)
iF (3x)


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