• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-02-2003, 21:43   #1 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ich hab ein schönes Beispiel für funktionales
Programmieren gefunden, passt auch zum Thema XML:

ActionScript:
  1. function addTag(tag) {
  2.   var stag='<'+tag+'>';
  3.   var etag='</'+tag+'>';
  4.   return function(x) {
  5.     return stag+x+etag;
  6.   }
  7. } 
  8.  
  9. Function.prototype.after=function(g) {
  10.   var f=this;
  11.   return function(x) {
  12.     return f(g(x));
  13.   }
  14. }
  15.  
  16. trace(addTag("b").after(addTag("i"))("helo"));
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 21-02-2003, 21:53   #2 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
Thumbs up

Elegant und nützlich flory.
Gnut ist offline   Mit Zitat antworten
Alt 22-02-2003, 04:24   #3 (permalink)
hOk
Neuer User
 
Benutzerbild von hOk
 
Registriert seit: Jun 2001
Ort: berlin
Beiträge: 829
Das Teil ist ja abgefahren, flory,
muss ich aber erstmal verdauen,
netten Gruß, Holger
__________________
gobogo
hOk ist offline   Mit Zitat antworten
Alt 22-02-2003, 11:02   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Tolles Beispiel,
das erinnert mich an lang zurückliegende Lisp-Vorlesungen.

Da muss man wirklich zweimal hinschauen,
um zu kapieren, was überhaupt passiert.

Und so was wie die Funktion, die von addTag geliefert wird,
ist dann wohl ein Lambda, oder wie war das ?

Merci für die Auffrischung,
mfg r.


Edit:
Hier gibt es einen kleinen Kurs in Lisp
http://apsymac33.uni-trier.de:8080/art/pp

Geändert von bokel (22-02-2003 um 12:51 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 22-02-2003, 14:28   #5 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
um ehrlich zu sein, habe ich das mit den Lambdas auch
noch nicht 100%ig kapiert, ich glaube das ist noch
etwas komplizierter.

Hier nochmal dasselbe Beispiel mit flexiblen Parametern:
ActionScript:
  1. Function.prototype.after=function(g) {
  2.         var f=this;
  3.         return function() {
  4.                 return f(g(arguments));
  5.         }
  6. }
  7.  
  8. function addTag(tag,attributes) {
  9.         var stag='<'+tag+" "+attributes+'>';
  10.         var etag='</'+tag+'>';
  11.         return function(x) {
  12.                 return stag+x+etag;
  13.         }
  14. }
  15.  
  16. res=addTag("b","class=\"classname\"").after(addTag("b"))("helo");

und Schleife mal anders:

ActionScript:
  1. Function.prototype.loop=function(x) {
  2.   var f=this;
  3.   return function() {
  4.     for (var i=0; i<x; i++) {
  5.         f.apply(f,arguments);      
  6.     }
  7.   }
  8. }
  9.  
  10. a=function(x,y) {
  11.     trace(x+" "+y);
  12. }
  13.  
  14. a.loop(10)("helo","world");

Sonnige Grüsse
Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 22-02-2003, 15:17   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ja, herrlich nicht wahr ?

Btw. das mit der Schleife muesste man noch rekursiv lösen,
damit es richtig passt. Und schon wieder stossen wir an die
256-Barriere

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 22-02-2003, 18:20   #7 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
wieso müsste man das rekursiv lösen? für einen Loop passt
das doch so.

Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 22-02-2003, 18:38   #8 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
"muss" man natürlich nicht,
aber ich dachte wir wollen
funktionale Programmierung simulieren

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 22-02-2003, 19:20   #9 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
>aber ich dachte wir wollen
>funktionale Programmierung simulieren

ok, wenn man es streng auslegt, sind Schleifen da
natürlich nicht erlaubt.
Mal schauen, wohin das alles führt, Function.prototype-
Erweiterungen werden ja noch kaum benutzt.

Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 22-02-2003, 19:55   #10 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Rekursiv könnte das so ausehen,
auch nicht unbedingt schöner
Ausserdem muesste man dann
strenggenommen das if auch noch
ersetzen.

ActionScript:
  1. Function.prototype.loop = function(x) {
  2.     if(x-- <= 0) return null;
  3.     //
  4.     var f = this;
  5.     return function () {
  6.         f.apply(f, arguments);
  7.         f.loop(x).apply(f, arguments);
  8.     };
  9. };
  10. a = function (x, y) {
  11.     trace(x + " " + y);
  12. };
  13. a.loop(10)("helo", "world");

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 23-02-2003, 10:14   #11 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ja, schön!
so wäre es denke ich erlaubt, weil ? : ja eine Expression ist:
ActionScript:
  1. Function.prototype.loop = function(x) {
  2.     x--;
  3.     var f = this;      
  4.     return (x<0) ? null : function () {
  5.                 f.apply(f, arguments);
  6.                 f.loop(x).apply(f, arguments);
  7.         }
  8. };

und noch ein interessanter Code-Schnipsel:
ActionScript:
  1. Function.prototype.keepArguments=function() {
  2.     var f=this;
  3.     var args=arguments;
  4.     return function() {
  5.        return f.apply(f, args);
  6.     }
  7. }
  8. z=function(x,y) {
  9.   return x*y;   
  10. }
  11. z1=z.keepArguments(2,3);
  12. trace(z1());
__________________
www.planet-xaml.net

Geändert von flory (23-02-2003 um 10:32 Uhr)
flory ist offline   Mit Zitat antworten
Alt 25-02-2003, 15:52   #12 (permalink)
LastActionScriptHero
 
Benutzerbild von k7c4
 
Registriert seit: Apr 2002
Beiträge: 572
@flory

Das letzte ist ja ideal, um callBacks und Event-Handler mit Parametern hinzukriegen

ActionScript:
  1. Function.prototype.callWith=function() {
  2.         var f=this;
  3.         var args=arguments;
  4.         return function() {
  5.                 return f.apply(f, args);
  6.         }
  7. }
  8.  
  9. this.onEnterFrame = trace.callWith(10)
__________________
All your AS are belong to us! haha!
Beweise heute Deine Tierliebe: Schlage nie ein totes Pferd!

Geändert von k7c4 (25-02-2003 um 17:57 Uhr)
k7c4 ist offline   Mit Zitat antworten
Alt 25-02-2003, 17:53   #13 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
genau - schönes Beispiel.

Da kann man noch viel mehr mit machen...

Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 25-02-2003, 20:20   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Hier noch ein Schnipsel aus der 4-Gewinnt-Engine

ActionScript:
  1. Function.prototype.executeLater = function(timeToWait, obj, paramArray) {
  2.     var func = this;
  3.     var intervalId = setInterval(function (obj) {
  4.         func.apply(obj, paramArray);
  5.         clearInterval(intervalId);
  6.     }, timeToWait, obj);
  7. };

Damit kann man eine Funktion einfach später
ausführen lassen.

ActionScript:
  1. function test(){
  2.       trace("test " + arguments);
  3. }
  4.  
  5. test.executeLater(1000, this, "bokel", "was", "here");

mfg r .
bokel ist offline   Mit Zitat antworten
Alt 25-02-2003, 20:25   #15 (permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
Thumbs up

sehr schön, danke!

@bokel: hast du hier schon aufgeräumt?

dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele