FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Scheme Aufgaben

Scheme Aufgaben 2002-02-10 22:41
Anonymer User
high,

kann mir vielleicht mal jemand die aufgabe des lambda abstraktors erklaeren?

mfg christian

Re: Scheme Aufgaben 2002-02-11 10:04
Christoph
also das Ding ist dazu gut, dass man damit eine Funktion
definieren kann, ohne ihr gleich einen Namen geben zu müssen.
Das ist so ähnlich wie bei curry denke ich. Ich bin mir
nicht absolut sicher, ob man z.B. innerhalb einer Rekursion
sowas unbedingt braucht, aber auf alle Fälle macht es das
ganze ein wenig kürzer und vielleicht auch übersichtlicher.

Re: Scheme Aufgaben 2002-02-11 15:12
Anonymer User
Hier ein klares Beispiel (an dem ich es zumindest verstanden habe, warum der manchmal nützlich ist):

(map (lambda (x) (* x x x)) '(1 2 3))

anstatt:

(define (x^3 x) (* x x x))

(map x^3 '(1 2 3))

Curry ist mir aber immer noch nicht klar. Wer erklärt's?

mfg Ulf

Re: Scheme Aufgaben 2002-02-11 15:44
Slater
also ich find curry noch am übersichtlichsten von den höheren funktionen,
einzige aufgabe: bindung von einigen argumenten an die funktion,
curry: linke positionen, rcurry: rechte positionen,
die schreibweise ist ja reine grammatik zum auswendig lernen

also

(define (x^y x y) (expt x y))

(define (x^3 x) ((rcurry x^y 3) x))

(define (3^x x) (( curry x^y 3) x))

mehr macht das gar nicht

Re: Scheme Aufgaben 2002-02-11 15:59
Slater
na gut ein paar eher unnütze beispiele,
aber aus

(map (lambda (x) (* x x x)) '(1 2 3))

wird dann

(map (rcurry expt 3) '(1 2 3))

das ist schon schicker

Re: Scheme Aufgaben 2002-02-11 17:32
Anonymer User
high,


(map (rcurry expt 3) '(1 2 3))

das ist schon schicker


ich habe das mal ausprobiert…

> (map (rcurry expt 3)'(1 2 3))
(1 8 27)
> (map (curry expt 3)'(1 2 3))
(3 9 27)
>

ich dachte rcurry wertet die an die funktion uebergebenden argumente von rechts nach links aus und und curry entsprechend umgekehrt.
So muessten doch die beiden listen gleich sein oder?

Wer weiss was dazu?

christian



Re: Scheme Aufgaben 2002-02-11 19:06
Slater

quote:
–ich dachte rcurry wertet die an die funktion uebergebenden argumente von rechts nach links aus und und curry entsprechend umgekehrt–

tja ich weiss nicht genau was du damit ausdrückst, da ist die natürliche sprache ja so ungenau,

jedenfalls ist (rcurry expt 3) anschaulich die funktion x^3 mit x als variable,
rcurry setzt in der vordefinierten funktion (expt x y) die RECHTE (wegen RCURRY) variable als 3 fest

(curry expt 3) ist dann eben 3^x, da die linke der beiden variblen als 3 festgeschrieben wird, (curry setzt links fest)

somit sind die beiden map-aufrufe eigentlich verständlich, sie benutzen zwei verschiede funktionen, die aber eindeutig ablesbar sind,

(map (rcurry expt 3)'(1 2 3))
–> ((expt 1 3) (expt 2 3) (expt 3 3)) –> (1 8 27)

(map (curry expt 3)'(1 2 3))
–> ((expt 3 1) (expt 3 2) (expt 3 3)) –> (3 9 27)