FB18 - Das Forum für Informatik

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

P1 Compose

P1 Compose 2005-02-07 13:38
Anonymer User
Wie kann man zwei zweistellige Funktionen mittels compose miteinander verbinden?
z.B. x+y und x*y

Versuche compose und curry ganz zu verstehen..

Re: P1 Compose 2005-02-07 13:50
javede
Da beide funktionen zweistellig sind, aber nach der auswertung nur ein wert bleibt, muss du bei der composition ein bißchen tricksen. Gehen würde z.B.:
(compose (curry + 3) *)
Dann hätte die addition allerdings einen festen parameter.

Re: P1 Compose 2005-02-07 13:58
Anonymer User
hab jetzt das probiert:

(define (compose f g)
(lambda (x)
(f (g x))))

(define (curry f x1)
(lambda (x2)
(f x1 x2)))

(define (juggle x) (compose (curry + 3) *))


bei der Anfrage (juggle 5) erhalte ich #<procedure:11:2>

Re: P1 Compose 2005-02-07 14:12
Anonymer User
Das muss du natürlich noch so korrigieren

(define (juggle x) ((compose (curry + 3) *)x))

dann müsste es auch laufen

Re: P1 Compose 2005-02-07 14:17
GroßerSchöpfer
oder:

(define juggle (compose (curry + 3) *))

Re: P1 Compose 2005-02-07 14:19
javede
Ich hab das jetzt so gelöst:
(define (juggle x y) ((compose (curry + 3) * ) x y))
Allerdings hab ich tools.scm benutzt, da dort curry und compose auch bei mehrstelligen Funktionen definiert sind

Re: P1 Compose 2005-02-07 14:26
Anonymer User
Wo kriegt man die tools nochmal her?

Re: P1 Compose 2005-02-07 14:28
javede
http://nats-www.informatik.uni-hamburg.de/view/P1WS04/SoftwareMaterial

Re: P1 Compose 2005-02-07 14:34
Anonymer User
Danke