HA3 6.2 mod? benutzung von filter

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

HA3 6.2 mod? benutzung von filter

Beitrag von Skylo »

Code: Alles auswählen

 ;; Hint:     use the buildin function mod 

(define (modulo-n-is-k lon n k)
  (filter (= (remainder (first lon) n) k ) lon))
Also ich weiss nicht was das soll, aber eigentlich finde ich das es funktionieren sollte.

Allerdings folgender Fehler
filter: expected argument of type <procedure (arity 1)>; given false

Was soll das? und was zur hölle soll die eingebaute Funktion mod sein!
Junge, geh kacken! Echt jetzt!

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

Beitrag von Stumpf.Alex »

filter konsumiert eine Funktion. Aber so übergibst du einen Ausdruck, der applikativ zu false ausgewertet wird. Nichts anderes steht in der Fehlermeldung. Am besten du definierst dir lokal eine Hilfsprozedur, die du übergibst, denn boolesche Ausdrücke können anscheinend nicht einfach so an filter übergeben werden. Das hat auch unser Prof irgendwann kurz in der Vorlesung erwähnt.
Was das mod ist, habe ich noch nicht herausgefunden. Ich meine aber, das Scheme eine eingebaute Modulo-Funktion hat und du die benutzen sollst.

majer
Neuling
Neuling
Beiträge: 4
Registriert: 22. Okt 2007 13:22

Beitrag von majer »

Natürlich ist auch die bereits eingebaute modulo Funktion gemeint. Im Template hat sich leider ein Fehler eingeschlichen, welcher nun korrigiert ist.

Viele Grüße
Niko

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

modulo fehlerhaft???

Beitrag von Stumpf.Alex »

Ok. Hab das mal ausprobiert...aber wieso spuckt er bei

Code: Alles auswählen

(modulo -20 6)
4
da die 4 aus???
Ich mein 3*-6 = -18 also ist der Rest -2??? Oder rechnet der dann nochmal 6-2 = 4? Aber wieso das denn? Jeder handelsübliche Taschenrechner spuckt mir da auch -2 aus.

baerchen
Computerversteher
Computerversteher
Beiträge: 382
Registriert: 24. Okt 2006 15:42

Beitrag von baerchen »

-2 mod 6 == 4 mod 6

ob du beim modulo das betragsmäßig kleinste element angibst oder das kleinste positive ist immer von der anwendung abhängig, möglich (und richtig) ist beides
We can do this the hard way or my way ...which is basically the same thing!

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

selbst wenn ich ne funktion dazu schreibe a la
(filter (remainder-right? lon n K) lon)
kommt die selbe meldung... son dreck!
Junge, geh kacken! Echt jetzt!

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

Beitrag von Stumpf.Alex »

So wird wieder erst die Funktion remainder-right? ausgewertet und das Ergebnis an filter übergeben.

Ich glaube du hast das Prinzip von Filter nicht richtig verstanden. Du übergibst zunächst Filter nur den Funktionsnamen deiner Vergleichsfunktion:

Code: Alles auswählen

(filter remainder-right? lon)
Später wird in filter dann deine Funktion remainder-right? aufgerufen und bekommt von filter NUR das aktuelle betrachtete Element aus der Liste lon. Deshalb musst du auch deine remainder-right? in modulo-n-is-k lokal definieren, damit deine Funktion auch Zugriff hat auf die Paramenter n und k von modulo-n-is-k hat (man beachte das Scoping!). Das Ergebnis von deiner remainder-right? muss dann ein boolean sein, dass dann entscheidet, ob das aktuelle Element in die neue Liste aufgenommen wird.

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

ahso ... hmmm aber es sollten dann hächsten 3 cond fälle sein oder?
Junge, geh kacken! Echt jetzt!

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

nur mal so...

ich darf ja nicht filter neu definieren und ich habe es in LOCAL versucht einzubinden. Funktioniert auch super nur es kommt der GLEICHE Fehler!


(filter remainder-right? lon)

danach local teil der auf die gewissen variablen zugreifen kann.

An sich funktioniert die teilfunktion, aber diese filter geschichte nervt mich echt weil dazu nirgens ein gescheites Beispiel steht, genauso wie im Internet fast NICHTS dazu gefunden werdne kann.

Woher also das Wissen nehmen? VL Skript is zu filter ein witz!
Junge, geh kacken! Echt jetzt!

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

Beitrag von Stumpf.Alex »

Im HTDP steht das wesentlich besser drin. Hier mal ein Beispiel für dich:

Code: Alles auswählen

;; Filtert alle Zahlen kleiner p aus
(define (number-below alon p)
  (cond
    [(empty? alon) empty]
    [else 
     (local
       (
         ;; less-than?: number -> boolean
         (define (less-than? n)
           (< n p)))
        
        (filter less-than? alon))]))

(number-below '(1 4 5 6 2 3 6) 5)
;; gibt (list 1 4 2 3) aus 
Viel Spaß damit! 8)

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

ich weiss nicht ob es an der uhrzeit liegt aber ich versteh die aufgabenstellung der ha 3.6.2 nicht so ganz.
wenn ich mir das bsp so anschaue, dann sieht man, dass 11%5=1 ergibt und 5%-4=1.
lieg ich da richtig?
wenn ja, dann hab ich die aufgabenstellung verstanden.
danke!

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

Beitrag von Stumpf.Alex »

Ja ne, keine Ahnung. Die Modulofunktion von Scheme ist ein bisschen untraditionel. Wurde schon ein paar Posts weiter oben diskutiert.

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

Stumpf.Alex hat geschrieben:Ja ne, keine Ahnung. Die Modulofunktion von Scheme ist ein bisschen untraditionel. Wurde schon ein paar Posts weiter oben diskutiert.
ok, jetzt ist alles klar :idea:
die uhrzeit, die uhrzeit 8)

Benutzeravatar
Skylo
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 149
Registriert: 7. Nov 2006 20:08
Wohnort: Darmstadt (Woogsviertel)
Kontaktdaten:

Beitrag von Skylo »

also bei mir kommt nun nur 11 raus. -4 wird irgendwie nicht anerkannt!

remainder ist nicht richtig, habs durch modulo ersetzt und es geht!
Junge, geh kacken! Echt jetzt!

BeatriceFriess
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:55
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von BeatriceFriess »

Also ich hab das gleiche Problem...
Bei mir kommt auch nur 11 raus aber nicht -4
Aber dazu kommt noch, das es auch nicht durch 0 geht...
Wo ich eigentlich nur eine Abbruchbedingung für 0 rein machen muss...
Aber...
Das mit der -4 ist komisch...

[edit]
Bin gerade mal durch den Stepper durch und hab den Grund gefunden...
Modulo -4 ergiebt als Ergebnis -1 und nicht 1...
Aber jetzt bin ich nicht sicher, ob das jetzt heißt, das -4 eigentlich nicht dazu gehört, oder ob da etwas falsch gelaufen ist...
Zum Beispiel Betrag

Antworten

Zurück zu „Archiv“