Funktionale Abstraktion

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Funktionale Abstraktion

Beitrag von ChristianK »

Es ist ja möglich z.B. einen Operator wie + oder auch < usw. an Funktionen zu übergeben. So z.B.:

(define (DoIt fkt arg1 arg2)
(fkt arg1 arg2))

(DoIt + 1 2) => 3

Funktioniert das auch mit and und or? Weil das gibt bei mir immer eine Fehlermeldung beim Aufruf der Funktion: "and: found a use of `and' that does not follow an open parenthesis"

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Also ich hab deinen Code Vorschlag kopiert und es ausporbiert und bei konnte ich auch > oder < problemlos einsetzen und es funktionierte Fehlerfrei.
Haste den die Sprache auf "Zwischenstufe" gestellt?

fl4$h g0rd0n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 115
Registriert: 1. Okt 2007 22:20

Beitrag von fl4$h g0rd0n »

Er wollte wissen, ob dies auch mit 'and' 'or' etc. funktioniert.
Bspw. (DoIt and true true)

Dass es nicht funktioniert, hängt nicht von der Wahl der Sprache ab (man teste es z. B. mit dem Standard R5RS).

and und or verhalten sich nur scheinbar wie Funktionen. Der Große Unterschied ist aber, dass keine Applikative Auswertungsreihenfolge angewendet wird.
(and false <foo> <bar>) bricht schon nach false ab und lässt <foo> und <bar> unausgewertet.
(or true <foo> <bar>) verhält sich genau so, das Ergebnis ist sowieso true.

Man muss also and und or zu den Sonderformen zählen. Ich würde behaupten, nur etwas mit applikativer Auswertung darf als Funktion betrachtet und somit als Argument an andere Funktionen übergeben werden.

Stumpf.Alex
Nerd
Nerd
Beiträge: 647
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Achso! Sry! :lol:

Antworten

Zurück zu „Archiv“