AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsparameter vorwärts abarbeiten

Ein Thema von gbl · begonnen am 24. Sep 2006 · letzter Beitrag vom 24. Sep 2006
Antwort Antwort
gbl

Registriert seit: 21. Aug 2004
18 Beiträge
 
#1

Funktionsparameter vorwärts abarbeiten

  Alt 24. Sep 2006, 14:20
Hallo,

ich habe hier ein hoffentlich nicht unlösbares Problem. Im Hauptprogrammblock habe ich Funktionen die Funktionen aufrufen. Ich hbe entdeckt, daß eigendlich alle Parameter von rechts nach links abgearbeitet werden. Die Ausgabe verdeutlicht dies.

PS: Das Programm ist zwar mit Lazarus geschrieben worden, wirkt sich jedoch nur auf den USES Teil aus.

Delphi-Quellcode:
program project1;
{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { add your units here };



type THTMLTag = record
        level: longint;
           end;

var HTMLTag: THTMLTag;



procedure inc_taglevel;
begin
  inc(HTMLTag.level);
  //writeln('Taglevel: ', HTMLTag.level);
end;

procedure dec_taglevel;
begin
  dec(HTMLTag.level);
  //writeln('Taglevel: ', HTMLTag.level);
end;




procedure test_parameter(args: array of const);
var I : longint;

begin
  exit;
end;


procedure HTML_Init;
begin
  HTMLTag.level:=0;
end;


procedure HTML_Start(tag: array of const);
begin
  test_parameter(tag);
  writeln('HTML_Start');
  inc_taglevel;
end;


function HTML_Table_Start(tag: array of const): integer;
begin
  test_parameter(tag);
  writeln('HTML_Table_Start');
  inc_taglevel;
end;


function HTML_Table_Ende:integer;
begin
  dec_taglevel;
  writeln('HTML_Table_Ende');
end;


function HTML_Table_Row_Start(tag: array of const): integer;
begin
  test_parameter(tag);
  writeln('HTML_Table_Row_Start');
  inc_taglevel;
end;


function HTML_Table_Row_Ende:integer;
begin
  dec_taglevel;
  writeln('HTML_Table_Row_Ende');
end;


begin
  writeln;
  writeln('Beginn des Tests');
  writeln;

  HTML_Start([
    HTML_Table_Start([
      HTML_Table_Row_Start([
      ]),
      HTML_Table_Row_Ende
    ]),
    HTML_Table_Ende
  ]);


  writeln;
  writeln('Ende des Tests');
end.

Code:
Beginn des Tests

HTML_Table_Row_Start
HTML_Table_Row_Ende
HTML_Table_Start
HTML_Table_Ende
HTML_Start

Ende des Tests

Ich möchte aber folgende Ausgabe erreichen;

Code:
Beginn des Tests

HTML_Start
HTML_Table_Start
HTML_Table_Row_Start
HTML_Table_Row_Ende
HTML_Table_Ende


Ende des Tests
Eben einfach so wie es im Programm steht.
______________________________________
cu.
Günter
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Funktionsparameter vorwärts abarbeiten

  Alt 24. Sep 2006, 14:34
Nein Günter,

nicht von rechts nach links, sondern von innen nach außen werden die verschachtelten Funktionen evaluiert. Dein Konzept muss das entsprechend berücksichtigen.

Grüße vom marabu
  Mit Zitat antworten Zitat
gbl

Registriert seit: 21. Aug 2004
18 Beiträge
 
#3

Re: Funktionsparameter vorwärts abarbeiten

  Alt 24. Sep 2006, 15:55
Danke,

du hast es richtig erkannt. Jedoch fällt mir eine Lösung dazu ein.
______________________________________
cu.
Günter
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Funktionsparameter vorwärts abarbeiten

  Alt 24. Sep 2006, 16:03
Zitat von gbl:
Jedoch fällt mir eine Lösung dazu ein.
Falls du ein "k" vor "eine" vergessen haben solltest ...

Die Verschachtelung macht eigentlich nur Sinn, wenn der Rückgabewert der einzelnen Funktionen der jeweils auszugebende String ist.

marabu
  Mit Zitat antworten Zitat
gbl

Registriert seit: 21. Aug 2004
18 Beiträge
 
#5

Re: Funktionsparameter vorwärts abarbeiten

  Alt 24. Sep 2006, 16:12
"k" vergessen.


Das Programm basiert auf der Idee, CGI Anwendungen elegant programmieren zu können. Desweiteren soll der erzeugte HTML Code auch elegant aussehen; die Einrückungen,... .

Ich bin auf der Suche nach einer "einfachen" Möglichkeit Prozeduren/Funktionen zu schachteln, die auch ein der Quelltextreichenfolge abgearbeitet werden.

Die Idee stammt von PEARL. Nur die Syntax dort ist für mich ein Brechmittel, außerdem gibts da keinen Compiler.
______________________________________
cu.
Günter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz